PGh0bWw+Cgk8aGVhZD4KCQk8dGl0bGU+cmVlbnRyYW5jeS5odG1sPC90aXRsZT4KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZXMuY3NzIj4KCTwvaGVhZD4KCTxib2R5PgoJCTxoND4KCQkJUmVlbnRyYW5jeQoJCTwvaDQ+CgkJPGRpdj4KCQkJTWFjcm8gZXhwYW5zaW9uIGluIHRoZSBwcmVwcm9jZXNzb3IgaXMgZW50aXJlbHkgZnVuY3Rpb25hbC4mbmJzcDsgVGhlcmVmb3JlLCAKCQkJdGhlcmUgaXMgbm8gaXRlcmF0aW9uLiZuYnNwOyBVbmZvcnR1bmF0ZWx5LCB0aGUgcHJlcHJvY2Vzc29yIGFsc28gZGlzYWxsb3dzIAoJCQlyZWN1cnNpb24uJm5ic3A7IFRoaXMgbWVhbnMgdGhhdCB0aGUgbGlicmFyeSBtdXN0IGZha2UgaXRlcmF0aW9uIG9yIHJlY3Vyc2lvbiAKCQkJYnkgZGVmaW5pbmcgc2V0cyBvZiBtYWNyb3MgdGhhdCBhcmUgaW1wbGVtZW50ZWQgc2ltaWxhcmx5LiZuYnNwOwoJCTwvZGl2PgoJCTxkaXY+CgkJCVRvIGlsbHVzdHJhdGUsIGhlcmUgaXMgYSBzaW1wbGUgY29uY2F0ZW5hdGlvbiBtYWNybzoKCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJjb2RlIj4KCQkJPHByZT4KI2RlZmluZSBDT05DQVQoYSwgYikgQ09OQ0FUX0QoYSwgYikKI2RlZmluZSBDT05DQVRfRChhLCBiKSBhICMjIGIKCkNPTkNBVChhLCBDT05DQVQoYiwgYykpIC8vIGFiYwo8L3ByZT4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlUaGlzIGlzIGZpbmUgZm9yIGEgc2ltcGxlIGNhc2UgbGlrZSB0aGUgYWJvdmUsIGJ1dCB3aGF0IGhhcHBlbnMgaW4gYSBzY2VuYXJpbyAKCQkJbGlrZSB0aGUgZm9sbG93aW5nOgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImNvZGUiPgoJCQk8cHJlPgojZGVmaW5lIEFCKHgsIHkpIENPTkNBVCh4LCB5KQoKQ09OQ0FUKEEsIEIocCwgcSkpIC8vIENPTkNBVChwLCBxKQo8L3ByZT4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlCZWNhdXNlIHRoZXJlIGlzIG5vIHJlY3Vyc2lvbiwgdGhlIGV4YW1wbGUgYWJvdmUgZXhwYW5kcyB0byA8Y29kZT5DT05DQVQocCwgcSk8L2NvZGU+CgkJCXJhdGhlciB0aGFuIDxjb2RlPnBxPC9jb2RlPi4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlUaGVyZSBhcmUgb25seSB0d28gd2F5cyB0byAiZml4IiB0aGUgYWJvdmUuJm5ic3A7IEZpcnN0LCBpdCBjYW4gYmUgZG9jdW1lbnRlZCAKCQkJdGhhdCA8Y29kZT5BQjwvY29kZT4gdXNlcyA8Y29kZT5DT05DQVQ8L2NvZGU+IGFuZCBkaXNhbGxvdyB1c2FnZSBzaW1pbGFyIHRvIHRoZSAKCQkJYWJvdmUuJm5ic3A7IFNlY29uZCwgbXVsdGlwbGUgY29uY2F0ZW5hdGlvbiBtYWNyb3MgY2FuIGJlIHByb3ZpZGVkLi4uLgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImNvZGUiPgoJCQk8cHJlPgojZGVmaW5lIENPTkNBVF8xKGEsIGIpIENPTkNBVF8xX0QoYSwgYikKI2RlZmluZSBDT05DQVRfMV9EKGEsIGIpIGEgIyMgYgoKI2RlZmluZSBDT05DQVRfMihhLCBiKSBDT05DQVRfMl9EKGEsIGIpCiNkZWZpbmUgQ09OQ0FUXzJfRChhLCBiKSBhICMjIGIKCiNkZWZpbmUgQUIoeCwgeSkgQ09OQ0FUXzIoeCwgeSkKCkNPTkNBVF8xKEEsIEIocCwgcSkpIC8vIHBxCjwvcHJlPgoJCTwvZGl2PgoJCTxkaXY+CgkJCVRoaXMgc29sdmVzIHRoZSBwcm9ibGVtLiZuYnNwOyBIb3dldmVyLCBpdCBpcyBub3cgbmVjZXNzYXJ5IHRvIGtub3cgdGhhdCA8Y29kZT5BQjwvY29kZT4KCQkJdXNlcywgbm90IG9ubHkgPGk+YTwvaT4gY29uY2F0ZW5hdGlvbiBtYWNybywgYnV0IDxjb2RlPkNPTkNBVF8yPC9jb2RlPiBzcGVjaWZpY2FsbHkuCgkJPC9kaXY+CgkJPGRpdj4KCQkJQSBiZXR0ZXIgc29sdXRpb24gaXMgdG8gYWJzdHJhY3QgPGk+d2hpY2g8L2k+IGNvbmNhdGVuYXRpb24gbWFjcm8gaXMgdXNlZC4uLi4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJjb2RlIj4KCQkJPHByZT4KI2RlZmluZSBBQihjLCB4LCB5KSBDT05DQVRfICMjIGMoeCwgeSkKCkNPTkNBVF8xKEEsIEIoMiwgcCwgcSkpIC8vIHBxCjwvcHJlPgoJCTwvZGl2PgoJCTxkaXY+CgkJCVRoaXMgaXMgYW4gZXhhbXBsZSBvZiA8aT5nZW5lcmljIHJlZW50cmFuY2U8L2k+LCBpbiB0aGlzIGNhc2UsIGludG8gYSBmaWN0aW9uYWwgCgkJCXNldCBvZiBjb25jYXRlbmF0aW9uIG1hY3Jvcy4mbmJzcDsgVGhlIDxjb2RlPmM8L2NvZGU+IHBhcmFtZXRlciByZXByZXNlbnRzIHRoZSAKCQkJInN0YXRlIiBvZiB0aGUgY29uY2F0ZW5hdGlvbiBjb25zdHJ1Y3QsIGFuZCBhcyBsb25nIGFzIHRoZSB1c2VyIGtlZXBzIHRyYWNrIG9mIAoJCQl0aGlzIHN0YXRlLCA8Y29kZT5BQjwvY29kZT4gY2FuIGJlIHVzZWQgaW5zaWRlIG9mIGEgY29uY2F0ZW5hdGlvbiBtYWNyby4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlUaGUgbGlicmFyeSBoYXMgdGhlIHNhbWUgY2hvaWNlcy4mbmJzcDsgSXQgZWl0aGVyIGhhcyB0byBkaXNhbGxvdyBhIGNvbnN0cnVjdCAKCQkJYmVpbmcgaW5zaWRlIGl0c2VsZiBvciBwcm92aWRlIG11bHRpcGxlLCBlcXVpdmFsZW50IGRlZmluaXRpb25zIG9mIGEgY29uc3RydWN0IAoJCQlhbmQgcHJvdmlkZSBhIHVuaWZvcm0gd2F5IHRvIDxpPnJlZW50ZXI8L2k+IHRoYXQgY29uc3RydWN0LiZuYnNwOyBUaGVyZSBhcmUgCgkJCXNldmVyYWwgY29udHJ1Y3RzIHRoYXQgPGk+cmVxdWlyZTwvaT4gcmVjdXJzaW9uIChzdWNoIGFzIDxiPkJPT1NUX1BQX1dISUxFPC9iPikuJm5ic3A7IAoJCQlDb25zZXF1ZW50bHksIHRoZSBsaWJyYXJ5IGNob29zZXMgdG8gcHJvdmlkZSBzZXZlcmFsIHNldHMgb2YgbWFjcm9zIHdpdGggCgkJCW1lY2hhbmlzbXMgdG8gcmVlbnRlciB0aGUgc2V0IGF0IGEgbWFjcm8gdGhhdCBoYXMgbm90IGFscmVhZHkgYmVlbiB1c2VkLgoJCTwvZGl2PgoJCTxkaXY+CgkJCUluIHBhcnRpY3VsYXIsIHRoZSBsaWJyYXJ5IG11c3QgcHJvdmlkZSByZWVudHJhbmNlIGZvciA8Yj5CT09TVF9QUF9GT1I8L2I+LCA8Yj5CT09TVF9QUF9SRVBFQVQ8L2I+LCAKCQkJYW5kIDxiPkJPT1NUX1BQX1dISUxFPC9iPi4mbmJzcDsgVGhlcmUgYXJlIHR3byBtZWNoYW5pc21zIHRoYXQgYXJlIHVzZWQgdG8gCgkJCWFjY29tcGxpc2ggdGhpczombmJzcDsgc3RhdGUgcGFyYW1ldGVycyAobGlrZSB0aGUgYWJvdmUgY29uY2F0ZW5hdGlvbiBleGFtcGxlKSAKCQkJYW5kIDxpPmF1dG9tYXRpYyByZWN1cnNpb248L2k+LgoJCTwvZGl2PgoJCTxoND4KCQkJU3RhdGUgUGFyYW1ldGVycwoJCTwvaDQ+CgkJPGRpdj4KCQkJRWFjaCBvZiB0aGUgYWJvdmUgY29uc3RydWN0cyAoPGI+Qk9PU1RfUFBfRk9SPC9iPiwgPGI+Qk9PU1RfUFBfUkVQRUFUPC9iPiwgYW5kIDxiPkJPT1NUX1BQX1dISUxFPC9iPikgCgkJCWhhcyBhbiBhc3NvY2lhdGVkIHN0YXRlLiZuYnNwOyBUaGlzIHN0YXRlIHByb3ZpZGVzIHRoZSBtZWFucyB0byByZWVudGVyIHRoZSAKCQkJcmVzcGVjdGl2ZSBjb25zdHJ1Y3QuCgkJPC9kaXY+CgkJPGRpdj4KCQkJU2V2ZXJhbCB1c2VyLWRlZmluZWQgbWFjcm9zIGFyZSBwYXNzZWQgdG8gZWFjaCBvZiB0aGVzZSBjb25zdHJ1Y3RzIChmb3IgdXNlIGFzIAoJCQlwcmVkaWNhdGVzLCBvcGVyYXRpb25zLCBldGMuKS4mbmJzcDsgRXZlcnkgdGltZSBhIHVzZXItZGVmaW5lZCBtYWNybyBpcyAKCQkJaW52b2tlZCwgaXQgaXMgcGFzc2VkIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjb25zdHJ1Y3QgdGhhdCBpbnZva2VkIGl0IHNvIAoJCQl0aGF0IHRoZSBtYWNybyBjYW4gcmVlbnRlciB0aGUgcmVzcGVjdGl2ZSBzZXQgaWYgbmVjZXNzYXJ5LgoJCTwvZGl2PgoJCTxkaXY+CgkJCVRoZXNlIHN0YXRlcyBhcmUgdXNlZCBpbiBvbmUgb2YgdHdvIHdheXMtLWVpdGhlciBieSBjb25jYXRlbmF0aW5nIHRvIG9yIHBhc3NpbmcgCgkJCXRvIGFub3RoZXIgbWFjcm8uCgkJPC9kaXY+CgkJPGRpdj4KCQkJVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG1hY3JvcyB0aGF0IHVzZSB0aGVzZSBzdGF0ZSBwYXJhbWV0ZXJzLiZuYnNwOyBGaXJzdCwgCgkJCXRoZSBzZXQgaXRzZWxmIHdoaWNoIGlzIHJlZW50ZXJlZCB0aHJvdWdoIGNvbmNhdGVuYXRpb24uJm5ic3A7IFNlY29uZCwgCgkJCWNvcnJlc3BvbmRpbmcgc2V0cyB0aGF0IGFjdCBsaWtlIHRoZXkgYXJlIGEgcGFydCBvZiB0aGUgdGhlIHByaW1hcnkgc2V0LiZuYnNwOyAKCQkJVGhlc2UgYXJlIGFsc28gcmVlbnRlcmVkIHRocm91Z2ggY29uY2F0ZW5hdGlvbi4mbmJzcDsgQW5kIHRoaXJkLCBtYWNyb3MgdGhhdCAKCQkJaW50ZXJuYWxseSB1c2UgdGhlIGZpcnN0IG9yIHNlY29uZCB0eXBlIG9mIG1hY3JvLiZuYnNwOyBUaGVzZSBtYWNyb3MgdGFrZSB0aGUgCgkJCXN0YXRlIGFzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQuCgkJPC9kaXY+CgkJPGRpdj4KCQkJVGhlIHN0YXRlIG9mIDxiPkJPT1NUX1BQX1dISUxFPC9iPiBpcyBzeW1ib2xpemVkIGJ5IHRoZSBsZXR0ZXIgPGk+RDwvaT4uJm5ic3A7IAoJCQlUd28gdXNlci1kZWZpbmVkIG1hY3JvcyBhcmUgcGFzc2VkIHRvIDxiPkJPT1NUX1BQX1dISUxFPC9iPi0tYSBwcmVkaWNhdGUgYW5kIGFuIAoJCQlvcGVyYXRpb24uJm5ic3A7IFdoZW4gPGI+Qk9PU1RfUFBfV0hJTEU8L2I+IGV4cGFuZHMgdGhlc2UgbWFjcm9zLCBpdCBwYXNzZXMgCgkJCWFsb25nIGl0cyBzdGF0ZSBzbyB0aGF0IHRoZXNlIG1hY3JvcyBjYW4gcmVlbnRlciB0aGUgPGI+Qk9PU1RfUFBfV0hJTEU8L2I+IHNldC4mbmJzcDsKCQk8L2Rpdj4KCQk8ZGl2PgoJCQlDb25zaWRlciB0aGUgZm9sbG93aW5nIG11bHRpcGxpY2F0aW9uIGltcGxlbWVudGF0aW9uIHRoYXQgaWxsdXN0cmF0ZXMgdGhpcyAKCQkJdGVjaG5pcXVlOgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9ImNvZGUiPgoJCQk8cHJlPgovLyBUaGUgYWRkaXRpb24gaW50ZXJmYWNlIG1hY3JvLgovLyBUaGUgX0Qgc2lnbmlmaWVzIHRoYXQgaXQgcmVlbnRlcnMKLy8gQk9PU1RfUFBfV0hJTEUgd2l0aCBjb25jYXRlbmF0aW9uLgoKI2RlZmluZSBBRERfRChkLCB4LCB5KSBcCiAgIEJPT1NUX1BQX1RVUExFX0VMRU0oIFwKICAgICAgMiwgMCwgXAogICAgICBCT09TVF9QUF9XSElMRV8gIyMgZChBRERfUCwgQUREX08sICh4LCB5KSkgXAogICApIFwKICAgLyoqLwoKLy8gVGhlIHByZWRpY2F0ZSB0aGF0IGlzIHBhc3NlZCB0byBCT09TVF9QUF9XSElMRS4KLy8gSXQgcmV0dXJucyAidHJ1ZSIgdW50aWwgInkiIGJlY29tZXMgemVyby4KCiNkZWZpbmUgQUREX1AoZCwgeHkpIEJPT1NUX1BQX1RVUExFX0VMRU0oMiwgMSwgeHkpCgovLyBUaGUgb3BlcmF0aW9uIHRoYXQgaXMgcGFzc2VkIHRvIEJPT1NUX1BQX1dISUxFLgovLyBJdCBpbmNyZW1lbnRzICJ4IiBhbmQgZGVjcmVtZW50cyAieSIgd2hpY2ggd2lsbAovLyBldmVudHVhbGx5IGNhdXNlICJ5IiB0byBlcXVhbCB6ZXJvIGFuZCB0aGVyZWZvcmUKLy8gY2F1c2UgdGhlIHByZWRpY2F0ZSB0byByZXR1cm4gImZhbHNlLiIKCiNkZWZpbmUgQUREX08oZCwgeHkpIFwKICAgKCBcCiAgICAgIEJPT1NUX1BQX0lOQyggXAogICAgICAgICBCT09TVF9QUF9UVVBMRV9FTEVNKDIsIDAsIHh5KSBcCiAgICAgICksIFwKICAgICAgQk9PU1RfUFBfREVDKCBcCiAgICAgICAgIEJPT1NUX1BQX1RVUExFX0VMRU0oMiwgMSwgeHkpIFwKICAgICAgKSBcCiAgICkgXAogICAvKiovCgovLyBUaGUgbXVsdGlwbGljYXRpb24gaW50ZXJmYWNlIG1hY3JvLgoKI2RlZmluZSBNVUwoeCwgeSkgXAogICBCT09TVF9QUF9UVVBMRV9FTEVNKCBcCiAgICAgIDMsIDAsIFwKICAgICAgQk9PU1RfUFBfV0hJTEUoTVVMX1AsIE1VTF9PLCAoMCwgeCwgeSkpIFwKICAgKSBcCiAgIC8qKi8KCi8vIFRoZSBwcmVkaWNhdGUgdGhhdCBpcyBwYXNzZWQgdG8gQk9PU1RfUFBfV0hJTEUuCi8vIEl0IHJldHVybnMgInRydWUiIHVudGlsICJ5IiBiZWNvbWVzIHplcm8uCgojZGVmaW5lIE1VTF9QKGQsIHJ4eSkgQk9PU1RfUFBfVFVQTEVfRUxFTSgzLCAyLCByeHkpCgovLyBUaGUgb3BlcmF0aW9uIHRoYXQgaXMgcGFzc2VkIHRvIEJPT1NUX1BQX1dISUxFLgovLyBJdCBhZGRzICJ4IiB0byAiciIgYW5kIGRlY3JlbWVudHMgInkiIHdoaWNoIHdpbGwKLy8gZXZlbnR1YWxseSBjYXVzZSAieSIgdG8gZXF1YWwgemVybyBhbmQgdGhlcmVmb3JlCi8vIGNhdXNlIHRoZSBwcmVkaWNhdGUgdG8gcmV0dXJuICJmYWxzZS4iCgojZGVmaW5lIE1VTF9PKGQsIHJ4eSkgXAogICAoIFwKICAgICAgQUREX0QoIFwKICAgICAgICAgZCwgLyogcGFzcyB0aGUgc3RhdGUgb24gdG8gQUREX0QgKi8gXAogICAgICAgICBCT09TVF9QUF9UVVBMRV9FTEVNKDMsIDAsIHJ4eSksIFwKICAgICAgICAgQk9PU1RfUFBfVFVQTEVfRUxFTSgzLCAxLCByeHkpIFwKICAgICAgKSwgXAogICAgICBCT09TVF9QUF9UVVBMRV9FTEVNKDMsIDEsIHJ4eSksIFwKICAgICAgQk9PU1RfUFBfREVDKCBcCiAgICAgICAgIEJPT1NUX1BQX1RVUExFX0VMRU0oMywgMiwgcnh5KSBcCiAgICAgICkgXAogICApIFwKICAgLyoqLwoKTVVMKDMsIDIpIC8vIGV4cGFuZHMgdG8gNgo8L3ByZT4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlUaGVyZSBhcmUgYSBjb3VwbGUgdGhpbmdzIHRvIG5vdGUgaW4gdGhlIGFib3ZlIGltcGxlbWVudGF0aW9uLiZuYnNwOyBGaXJzdCwgCgkJCW5vdGUgaG93IDxjb2RlPkFERF9EPC9jb2RlPiByZWVudGVycyA8Yj5CT09TVF9QUF9XSElMRTwvYj4gdXNpbmcgdGhlIDxpPmQ8L2k+IHN0YXRlIAoJCQlwYXJhbWV0ZXIuJm5ic3A7IFNlY29uZCwgbm90ZSBob3cgPGNvZGU+TVVMPC9jb2RlPidzIG9wZXJhdGlvbiwgd2hpY2ggaXMgCgkJCWV4cGFuZGVkIGJ5IDxiPkJPT1NUX1BQX1dISUxFPC9iPiwgcGFzc2VzIHRoZSBzdGF0ZSBvbiB0byA8Y29kZT5BRERfRDwvY29kZT4uJm5ic3A7IAoJCQlUaGlzIGlsbHVzdHJhdGVzIHN0YXRlIHJlZW50cmFuY2UgYnkgYm90aCBhcmd1bWVudCBhbmQgY29uY2F0ZW5hdGlvbi4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlGb3IgZXZlcnkgbWFjcm8gaW4gdGhlIGxpYnJhcnkgdGhhdCB1c2VzIDxiPkJPT1NUX1BQX1dISUxFPC9iPiwgdGhlcmUgaXMgYSAKCQkJc3RhdGUgcmVlbnRyYW50IHZhcmlhbnQuJm5ic3A7IElmIHRoYXQgdmFyaWFudCB1c2VzIGFuIGFyZ3VtZW50IHJhdGhlciB0aGFuIAoJCQljb25jYXRlbmF0aW9uLCBpdCBpcyBzdWZmaXhlZCBieSA8Y29kZT5fRDwvY29kZT4gdG8gc3ltYm9saXplIGl0cyBtZXRob2Qgb2YgCgkJCXJlZW50cmFuY2UuJm5ic3A7IEV4YW1wbGVzIG9yIHRoaXMgaW5jbHVkZSB0aGUgbGlicmFyeSdzIG93biA8Yj5CT09TVF9QUF9BRERfRDwvYj4KCQkJYW5kIDxiPkJPT1NUX1BQX01VTF9EPC9iPi4mbmJzcDsgSWYgdGhlIHZhcmlhbnQgdXNlcyBjb25jYXRlbmF0aW9uLCBpdCBpcyAKCQkJc3VmZml4ZWQgYnkgYW4gdW5kZXJzY29yZS4mbmJzcDsgSXQgaXMgY29tcGxldGVkIGJ5IGNvbmNhdGVuYXRpb24gb2YgdGhlIAoJCQlzdGF0ZS4mbmJzcDsgVGhpcyBpbmNsdWRlcyA8Yj5CT09TVF9QUF9XSElMRTwvYj4gaXRzZWxmIHdpdGggPGI+Qk9PU1RfUFBfV0hJTEVfPC9iPgoJCQkjIyA8aT5kPC9pPiBhbmQsIGZvciBleGFtcGxlLCA8Yj5CT09TVF9QUF9MSVNUX0ZPTERfTEVGVDwvYj4gd2l0aCA8Yj5CT09TVF9QUF9MSVNUX0ZPTERfTEVGVF88L2I+CgkJCSMjIDxpPmQ8L2k+LgoJCTwvZGl2PgoJCTxkaXY+CgkJCVRoZSBzYW1lIHNldCBvZiBjb252ZW50aW9ucyBhcmUgdXNlZCBmb3IgPGI+Qk9PU1RfUFBfRk9SPC9iPiBhbmQgPGI+Qk9PU1RfUFBfUkVQRUFUPC9iPiwgCgkJCWJ1dCB3aXRoIHRoZSBsZXR0ZXJzIDxpPlI8L2k+IGFuZCA8aT5aPC9pPiwgcmVzcGVjdGl2ZWx5LCB0byBzeW1ib2xpemUgdGhlaXIgCgkJCXN0YXRlcy4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlBbHNvIG5vdGUgdGhhdCB0aGUgYWJvdmUgPGNvZGU+TVVMPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiwgdGhvdWdoIG5vdCAKCQkJaW1tZWRpYXRlbHkgb2J2aW91cywgaXMgdXNpbmcgPGk+YWxsIHRocmVlPC9pPiB0eXBlcyBvZiByZWVudHJhbmNlLiZuYnNwOyBOb3QgCgkJCW9ubHkgaXMgaXQgdXNpbmcgYm90aCB0eXBlcyBvZiA8aT5zdGF0ZTwvaT4gcmVlbnRyYW5jZSwgaXQgaXMgYWxzbyB1c2luZyA8aT5hdXRvbWF0aWMgCgkJCQlyZWN1cnNpb248L2k+Li4uLgoJCTwvZGl2PgoJCTxoND4KCQkJQXV0b21hdGljIFJlY3Vyc2lvbgoJCTwvaDQ+CgkJPGRpdj4KCQkJQXV0b21hdGljIHJlY3Vyc2lvbiBpcyBhIHRlY2huaXF1ZSB0aGF0IHZhc3RseSBzaW1wbGlmaWVzIHRoZSB1c2Ugb2YgcmVlbnRyYW50IAoJCQljb25zdHJ1Y3RzLiZuYnNwOyBJdCBpcyB1c2VkIGJ5IHNpbXBseSA8aT5ub3Q8L2k+IHVzaW5nIGFueSBzdGF0ZSBwYXJhbWV0ZXJzIGF0IAoJCQlhbGwuCgkJPC9kaXY+CgkJPGRpdj4KCQkJVGhlIDxjb2RlPk1VTDwvY29kZT4gZXhhbXBsZSBhYm92ZSB1c2VzIGF1dG9tYXRpYyByZWN1cnNpb24gd2hlbiBpdCB1c2VzIDxiPkJPT1NUX1BQX1dISUxFPC9iPgoJCQlieSBpdHNlbGYuJm5ic3A7IEluIG90aGVyIHdvcmRzLCA8Y29kZT5NVUw8L2NvZGU+IGNhbiA8aT5zdGlsbDwvaT4gYmUgdXNlZCAKCQkJaW5zaWRlIDxiPkJPT1NUX1BQX1dISUxFPC9iPiBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHJlZW50ZXIgPGI+Qk9PU1RfUFBfV0hJTEU8L2I+CgkJCWJ5IGNvbmNhdGVuYXRpbmcgdGhlIHN0YXRlIHRvIDxiPkJPT1NUX1BQX1dISUxFXzwvYj4uCgkJPC9kaXY+CgkJPGRpdj4KCQkJVG8gYWNjb21wbGlzaCB0aGlzLCB0aGUgbGlicmFyeSB1c2VzIGEgInRyaWNrLiImbmJzcDsgRGVzcGl0ZSB3aGF0IGl0IGxvb2tzIAoJCQlsaWtlLCB0aGUgbWFjcm8gPGI+Qk9PU1RfUFBfV0hJTEU8L2I+IGRvZXMgbm90IHRha2UgdGhyZWUgYXJndW1lbnRzLiZuYnNwOyBJbiAKCQkJZmFjdCwgaXQgdGFrZXMgbm8gYXJndW1lbnRzIGF0IGFsbC4mbmJzcDsgSW5zdGVhZCwgdGhlIDxiPkJPT1NUX1BQX1dISUxFPC9iPiBtYWNybyAKCQkJZXhwYW5kcyA8aT50bzwvaT4gYSBtYWNybyB0aGF0IHRha2VzIHRocmVlIGFyZ3VtZW50cy4mbmJzcDsgSXQgc2ltcGx5IGRldGVjdHMgCgkJCXdoYXQgdGhlIG5leHQgYXZhaWxhYmxlIDxiPkJPT1NUX1BQX1dISUxFXzwvYj4gIyMgPGk+ZDwvaT4gbWFjcm8gaXMgYW5kIHJldHVybnMgCgkJCWl0LiZuYnNwOyBUaGlzIGRldGVjdGlvbiBwcm9jZXNzIGlzIHNvbWV3aGF0IGludm9sdmVkLCBzbyBJIHdvbid0IGdvIGludG8gPGk+aG93PC9pPgoJCQlpdCB3b3JrcyBoZXJlLCBidXQgc3VmZmljZSB0byBzYXkgaXQgPGk+ZG9lczwvaT4gd29yay4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlVc2luZyBhdXRvbWF0aWMgcmVjdXJzaW9uIHRvIHJlZW50ZXIgdmFyaW91cyBzZXRzIG9mIG1hY3JvcyBpcyBvYnZpb3VzbHkgbXVjaCAKCQkJc2ltcGxlci4mbmJzcDsgSXQgY29tcGxldGVseSBoaWRlcyB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiZuYnNwOyAKCQkJU28sIGlmIGl0IGlzIHNvIG11Y2ggZWFzaWVyIHRvIHVzZSwgd2h5IGRvIHRoZSBzdGF0ZSBwYXJhbWV0ZXJzIHN0aWxsIAoJCQlleGlzdD8mbmJzcDsgVGhlIHJlYXNvbiBpcyBzaW1wbGUgYXMgd2VsbC4mbmJzcDsgV2hlbiBzdGF0ZSBwYXJhbWV0ZXJzIGFyZSAKCQkJdXNlZCwgdGhlIHN0YXRlIGlzIDxpPmtub3duPC9pPiBhdCBhbGwgdGltZXMuJm5ic3A7IFRoaXMgaXMgbm90IHRoZSBjYXNlIHdoZW4gCgkJCWF1dG9tYXRpYyByZWN1cnNpb24gaXMgdXNlZC4mbmJzcDsgVGhlIGF1dG9tYXRpYyByZWN1cnNpb24gbWVjaGFuaXNtIGhhcyB0byA8aT5kZWR1Y2U8L2k+CgkJCXRoZSBzdGF0ZSBhdCBlYWNoIHBvaW50IHRoYXQgaXQgaXMgdXNlZC4mbmJzcDsgVGhpcyBpbXBsaWVzIGEgY29zdCBpbiBtYWNybyAKCQkJY29tcGxleGl0eSB0aGF0IGluIHNvbWUgc2l0dWF0aW9ucy0tbm90YWJseSBhdCBkZWVwIG1hY3JvIGRlcHRocy0td2lsbCBzbG93IAoJCQlzb21lIHByZXByb2Nlc3NvcnMgdG8gYSBjcmF3bC4KCQk8L2Rpdj4KCQk8aDQ+CgkJCUNvbmNsdXNpb24KCQk8L2g0PgoJCTxkaXY+CgkJCUl0IGlzIHJlYWxseSBhIHRyYWRlb2ZmIHdoZXRoZXIgdG8gdXNlIHN0YXRlIHBhcmFtZXRlcnMgb3IgYXV0b21hdGljIHJlY3Vyc2lvbiAKCQkJZm9yIHJlZW50cmFuY3kuJm5ic3A7IFRoZSBzdHJlbmd0aHMgb2YgYXV0b21hdGljIHJlY3Vyc2lvbiBhcmUgZWFzZSBvZiB1c2UgYW5kIAoJCQlpbXBsZW1lbnRhdGlvbiBlbmNhcHN1bGF0aW9uLiZuYnNwOyBUaGVzZSBjb21lIGF0IGEgcGVyZm9ybWFuY2UgY29zdCBvbiBzb21lIAoJCQlwcmVwcm9jZXNzb3JzIGluIHNvbWUgc2l0dWF0aW9ucy4mbmJzcDsgVGhlIHByaW1hcnkgc3RyZW5ndGggb2Ygc3RhdGUgCgkJCXBhcmFtZXRlcnMsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBlZmZpY2llbmN5LiZuYnNwOyBVc2Ugb2YgdGhlIHN0YXRlIHBhcmFtZXRlcnMgCgkJCWlzIHRoZSBvbmx5IHdheSB0byBhY2hpZXZlIDxpPm1heGltdW08L2k+IGVmZmljaWVuY3kuJm5ic3A7IFRoaXMgZWZmaWNpZW5jeSAKCQkJY29tZXMgYXQgdGhlIGNvc3Qgb2YgYm90aCBjb2RlIGNvbXBsZXhpdHkgYW5kIGV4cG9zaXRpb24gb2YgaW1wbGVtZW50YXRpb24uCgkJPC9kaXY+CgkJPGg0PgoJCQlTZWUgQWxzbwoJCTwvaDQ+CgkJPHVsPgoJCQk8bGk+PGEgaHJlZj0iLi4vcmVmL2Zvci5odG1sIj5CT09TVF9QUF9GT1I8L2E+PC9saT4KCQkJPGxpPjxhIGhyZWY9Ii4uL3JlZi9yZXBlYXQuaHRtbCI+Qk9PU1RfUFBfUkVQRUFUPC9hPjwvbGk+CgkJCTxsaT48YSBocmVmPSIuLi9yZWYvd2hpbGUuaHRtbCI+Qk9PU1RfUFBfV0hJTEU8L2E+PC9saT4KCQk8L3VsPgoJCTxkaXYgY2xhc3M9InNpZyI+CgkJCS0gUGF1bCBNZW5zb25pZGVzCgkJPC9kaXY+Cgk8aHIgc2l6ZT0iMSI+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPGk+qSBDb3B5cmlnaHQgPGEgaHJlZj0iaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20iIHRhcmdldD0iX3RvcCI+SG91c2VtYXJxdWUgT3k8L2E+IDIwMDI8L2k+CgkJPC9icj48aT6pIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMjwvaT4KCTwvZGl2PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJCTxwPjxzbWFsbD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKCQlhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKCQljb3B5IGF0IDxhIGhyZWY9CgkJImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvc21hbGw+PC9wPgoJPC9kaXY+Cgk8L2JvZHk+CjwvaHRtbD4K