UG9sYXJTU0wgQ2hhbmdlTG9nDQoNCj0gVmVyc2lvbiAwLjEwLjAgcmVsZWFzZWQgb24gMjAwOS0wMS0xMg0KICAgKiBNaWdyYXRlZCBYeVNTTCB0byBQb2xhclNTTA0KICAgKiBBZGRlZCBYVEVBIHN5bW1ldHJpYyBjaXBoZXINCiAgICogQWRkZWQgQ2FtZWxsaWEgc3ltbWV0cmljIGNpcGhlcg0KICAgKiBBZGRlZCBzdXBwb3J0IGZvciBjaXBoZXJzdWl0ZXM6IFNTTF9SU0FfQ0FNRUxMSUFfMTI4X1NIQSwNCiAgICAgU1NMX1JTQV9DQU1FTExJQV8yNTZfU0hBIGFuZCBTU0xfRURIX1JTQV9DQU1FTExJQV8yNTZfU0hBDQogICAqIEZpeGVkIGRhbmdlcm91cyBidWcgdGhhdCBjYW4gY2F1c2UgYSBoZWFwIG92ZXJmbG93IGluDQogICAgIHJzYV9wa2NzMV9kZWNyeXB0IChmb3VuZCBieSBDaHJpc3RvcGhlIERldmluZSkNCg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KWHlTU0wgQ2hhbmdlTG9nDQoNCj0gVmVyc2lvbiAwLjkgcmVsZWFzZWQgb24gMjAwOC0wMy0xNg0KDQogICAgKiBBZGRlZCBzdXBwb3J0IGZvciBjaXBoZXJzdWl0ZTogU1NMX1JTQV9BRVNfMTI4X1NIQQ0KICAgICogRW5hYmxlZCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcyBieSBkZWZhdWx0IGluIGFlc2NyeXB0Mi5jDQogICAgKiBQcmVsaW1pbmFyeSBvcGVuc3NsIHdyYXBwZXIgY29udHJpYnV0ZWQgYnkgRGF2aWQgQmFycmV0dA0KICAgICogRml4ZWQgYSBidWcgaW4gc3NsX3dyaXRlKCkgdGhhdCBjYXVzZWQgdGhlIHNhbWUgcGF5bG9hZCB0bw0KICAgICAgYmUgc2VudCB0d2ljZSBpbiBub24tYmxvY2tpbmcgbW9kZSB3aGVuIHNlbmQgcmV0dXJucyBFQUdBSU4NCiAgICAqIEZpeGVkIHNzbF9wYXJzZV9jbGllbnRfaGVsbG8oKTogc2Vzc2lvbiBpZCBhbmQgY2hhbGxlbmdlIG11c3QNCiAgICAgIG5vdCBiZSBzd2FwcGVkIGluIHRoZSBTU0x2MiBDbGllbnRIZWxsbyAoZm91bmQgYnkgR3JlZyBSb2Jzb24pDQogICAgKiBBZGRlZCB1c2VyLWRlZmluZWQgY2FsbGJhY2sgZGVidWcgZnVuY3Rpb24gKEtyeXN0aWFuIEtvbG9kemllaikNCiAgICAqIEJlZm9yZSBmcmVlaW5nIGEgY2VydGlmaWNhdGUsIHByb3Blcmx5IHplcm8gb3V0IGFsbCBjZXJ0LiBkYXRhDQogICAgKiBGaXhlZCB0aGUgIm1vZGUiIHBhcmFtZXRlciBzbyB0aGF0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBhcmUNCiAgICAgIG5vdCBzd2FwcGVkIG9uIFBhZExvY2s7IGFsc28gZml4ZWQgY29tcGlsYXRpb24gb24gb2xkZXIgdmVyc2lvbnMNCiAgICAgIG9mIGdjYyAoYnVnIHJlcG9ydGVkIGJ5IERhdmlkIEJhcnJldHQpDQogICAgKiBDb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIGluIHBhZGxvY2tfeGNyeXB0Y2JjKCkgd2hlbiBpbnB1dCBvcg0KICAgICAgb3VwdXQgZGF0YSBpcyBub24tYWxpZ25lZCBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIHNvZnR3YXJlDQogICAgICBpbXBsZW1lbnRhdGlvbiwgYXMgVklBIE5laGVtaWFoIGNhbm5vdCBoYW5kbGUgbm9uLWFsaWduZWQgYnVmZmVycw0KICAgICogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB4NTA5cGFyc2VfY3J0KCkgd2hpY2ggd2FzIHJlcG9ydGVkIGJ5IEdyZWcNCiAgICAgIFJvYnNvbi1HYXJ0aDsgc29tZSB4NTA5d3JpdGUuYyBmaXhlcyBieSBQYXNjYWwgVml6ZWxpLCB0aGFua3MgdG8NCiAgICAgIE1hdHRoZXcgUGFnZSB3aG8gcmVwb3J0ZWQgc2V2ZXJhbCBidWdzDQogICAgKiBGaXhlZCB4NTA5X2dldF9leHQoKSB0byBhY2NlcHQgc29tZSByYXJlIGNlcnRpZmljYXRlcyB3aGljaCBoYXZlDQogICAgICBhbiBJTlRFR0VSIGluc3RlYWQgb2YgYSBCT09MRUFOIGZvciBCYXNpY0NvbnN0cmFpbnRzOjpjQS4NCiAgICAqIEFkZGVkIHN1cHBvcnQgb24gdGhlIGNsaWVudCBzaWRlIGZvciB0aGUgVExTICJob3N0bmFtZSIgZXh0ZW5zaW9uDQogICAgICAocGF0Y2ggY29udHJpYnV0ZWQgYnkgRGF2aWQgUGF0aW5vKQ0KICAgICogTWFrZSB4NTA5cGFyc2VfdmVyaWZ5KCkgcmV0dXJuIEJBRENFUlRfQ05fTUlTTUFUQ0ggd2hlbiBhbiBlbXB0eQ0KICAgICAgc3RyaW5nIGlzIHBhc3NlZCBhcyB0aGUgQ04gKGJ1ZyByZXBvcnRlZCBieSBzcG9vZnkpDQogICAgKiBBZGRlZCBhbiBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgdGhlIEJOIGFzc2VtYmx5IGNvZGUNCiAgICAqIFVwZGF0ZWQgcnNhX2NoZWNrX3ByaXZrZXkoKSB0byB2ZXJpZnkgdGhhdCAoRCpFKSA9IDEgJSAoUC0xKSooUS0xKQ0KICAgICogRGlzYWJsZWQgb2Jzb2xldGUgaGFzaCBmdW5jdGlvbnMgYnkgZGVmYXVsdCAoTUQyLCBNRDQpOyB1cGRhdGVkDQogICAgICBzZWxmdGVzdCBhbmQgYmVuY2htYXJrIHRvIG5vdCB0ZXN0IGNpcGhlcnMgdGhhdCBoYXZlIGJlZW4gZGlzYWJsZWQNCiAgICAqIFVwZGF0ZWQgeDUwOXBhcnNlX2NlcnRfaW5mbygpIHRvIGNvcnJlY3RseSBkaXNwbGF5IGJ5dGUgMCBvZiB0aGUNCiAgICAgIHNlcmlhbCBudW1iZXIsIHNldHVwIGNvcnJlY3Qgc2VydmVyIHBvcnQgaW4gdGhlIHNzbCBjbGllbnQgZXhhbXBsZQ0KICAgICogRml4ZWQgYSBjcml0aWNhbCBkZW5pYWwtb2Ytc2VydmljZSB3aXRoIFguNTA5IGNlcnQuIHZlcmlmaWNhdGlvbjoNCiAgICAgIHBlZXIgbWF5IGNhdXNlIHh5c3NsIHRvIGxvb3AgaW5kZWZpbml0ZWx5IGJ5IHNlbmRpbmcgYSBjZXJ0aWZpY2F0ZQ0KICAgICAgZm9yIHdoaWNoIHRoZSBSU0Egc2lnbmF0dXJlIGNoZWNrIGZhaWxzIChidWcgcmVwb3J0ZWQgYnkgQmVub2l0KQ0KICAgICogQWRkZWQgdGVzdCB2ZWN0b3JzIGZvcjogQUVTLUNCQywgQUVTLUNGQiwgREVTLUNCQyBhbmQgM0RFUy1DQkMsDQogICAgICBITUFDLU1ENSwgSE1BQy1TSEExLCBITUFDLVNIQS0yNTYsIEhNQUMtU0hBLTM4NCwgYW5kIEhNQUMtU0hBLTUxMg0KICAgICogRml4ZWQgSE1BQy1TSEEtMzg0IGFuZCBITUFDLVNIQS01MTIgKHRoYW5rcyB0byBKb3NoIFNpbnlraW4pDQogICAgKiBNb2RpZmllZCBzc2xfcGFyc2VfY2xpZW50X2tleV9leGNoYW5nZSgpIHRvIHByb3RlY3QgYWdhaW5zdA0KICAgICAgRGFuaWVsIEJsZWljaGVuYmFjaGVyIGF0dGFjayBvbiBQS0NTIzEgdjEuNSBwYWRkaW5nLCBhcyB3ZWxsDQogICAgICBhcyB0aGUgS2xpbWEtUG9rb3JueS1Sb3NhIGV4dGVuc2lvbiBvZiBCbGVpY2hlbmJhY2hlcidzIGF0dGFjaw0KICAgICogVXBkYXRlZCByc2FfZ2VuX2tleSgpIHNvIHRoYXQgY3R4LT5OIGlzIGFsd2F5cyBuYml0cyBpbiBzaXplDQogICAgKiBGaXhlZCBhc3NlbWJseSBQUEMgY29tcGlsYXRpb24gZXJyb3JzIG9uIE1hYyBPUyBYLCB0aGFua3MgdG8NCiAgICAgIERhdmlkIEJhcnJldHQgYW5kIER1c2FuIFNlbWVuDQoNCj0gVmVyc2lvbiAwLjggcmVsZWFzZWQgb24gMjAwNy0xMC0yMA0KDQogICAgKiBNb2RpZmllZCB0aGUgSE1BQyBmdW5jdGlvbnMgdG8gaGFuZGxlIGtleXMgbGFyZ2VyDQogICAgICB0aGFuIDY0IGJ5dGVzLCB0aGFua3MgdG8gU3RlcGhhbmUgRGVzbmV1eCBhbmQgZ2FyeSBuZw0KICAgICogRml4ZWQgc3NsX3JlYWRfcmVjb3JkKCkgdG8gcHJvcGVybHkgdXBkYXRlIHRoZSBoYW5kc2hha2UNCiAgICAgIG1lc3NhZ2UgZGlnZXN0cywgd2hpY2ggZml4ZXMgSUU2L0lFNyBjbGllbnQgYXV0aGVudGljYXRpb24NCiAgICAqIENsZWFuZWQgdXAgdGhlIFhZU1NMKiAjZGVmaW5lcywgc3VnZ2VzdGVkIGJ5IEF6cmllbCBGYXN0ZW4NCiAgICAqIEZpeGVkIG5ldF9yZWN2KCksIHRoYW5rcyB0byBMb3JlbnogU2Nob3JpIGFuZCBFZ29uIEtvY2phbg0KICAgICogQWRkZWQgdXNlci1kZWZpbmVkIGNhbGxiYWNrcyBmb3IgaGFuZGxpbmcgSS9PIGFuZCBzZXNzaW9ucw0KICAgICogQWRkZWQgbG90cyBvZiBkZWJ1Z2dpbmcgb3V0cHV0IGluIHRoZSBTU0wvVExTIGZ1bmN0aW9ucw0KICAgICogQWRkZWQgcHJlbGltaW5hcnkgWC41MDkgY2VydC4gd3JpdGluZyBieSBQYXNjYWwgVml6ZWxpDQogICAgKiBBZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciB0aGUgVklBIFBhZExvY2sgcm91dGluZXMNCiAgICAqIEFkZGVkIEFFUy1DRkIgbW9kZSBvZiBvcGVyYXRpb24sIGNvbnRyaWJ1dGVkIGJ5IGNobWlrZQ0KICAgICogQWRkZWQgYW4gU1NML1RMUyBzdHJlc3MgdGVzdGluZyBwcm9ncmFtIChzc2xfdGVzdC5jKQ0KICAgICogVXBkYXRlZCB0aGUgUlNBIFBLQ1MjMSBjb2RlIHRvIGFsbG93IGNob29zaW5nIGJldHdlZW4NCiAgICAgIFJTQV9QVUJMSUMgYW5kIFJTQV9QUklWQVRFLCBhcyBzdWdnZXN0ZWQgYnkgRGF2aWQgQmFycmV0dA0KICAgICogVXBkYXRlZCBzc2xfcmVhZCgpIHRvIHNraXAgMC1sZW5ndGggcmVjb3JkcyBmcm9tIE9wZW5TU0wNCiAgICAqIEZpeGVkIHRoZSBtYWtlIGluc3RhbGwgdGFyZ2V0IHRvIGNvbXBseSB3aXRoICpCU0QgbWFrZQ0KICAgICogRml4ZWQgYSBidWcgaW4gbXBpX3JlYWRfYmluYXJ5KCkgb24gNjQtYml0IHBsYXRmb3Jtcw0KICAgICogbXBpX2lzX3ByaW1lKCkgc3BlZWR1cHMsIHRoYW5rcyB0byBLZXZpbiBNY0xhdWdobGluDQogICAgKiBGaXhlZCBhIGxvbmcgc3RhbmRpbmcgbWVtb3J5IGxlYWsgaW4gbXBpX2lzX3ByaW1lKCkNCiAgICAqIFJlcGxhY2VkIHJlYWxsb2Mgd2l0aCBtYWxsb2MgaW4gbXBpX2dyb3coKSwgYW5kIHNldA0KICAgICAgdGhlIHNpZ24gb2YgemVybyBhcyBwb3NpdGl2ZSBpbiBtcGlfaW5pdCgpIChyZXBvcnRlZA0KICAgICAgYnkgSm9uYXRoYW4gTS4gTWNDdW5lKQ0KDQo9IFZlcnNpb24gMC43IHJlbGVhc2VkIG9uIDIwMDctMDctMDcNCg0KICAgICogQWRkZWQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvQmxhemUgc29mdC1jb3JlIHByb2Nlc3Nvcg0KICAgICogRml4ZWQgYSBidWcgaW4gc3NsX3Rscy5jIHdoaWNoIHNvbWV0aW1lcyBwcmV2ZW50ZWQgU1NMDQogICAgICBjb25uZWN0aW9ucyBmcm9tIGJlaW5nIGVzdGFibGlzaGVkIHdpdGggbm9uLWJsb2NraW5nIEkvTw0KICAgICogRml4ZWQgYSBjb3VwbGUgYnVncyBpbiB0aGUgVlM2IGFuZCBVTklYIE1ha2VmaWxlcw0KICAgICogRml4ZWQgdGhlICJQSUMgcmVnaXN0ZXIgZWJ4IGNsb2JiZXJlZCBpbiBhc20iIGJ1Zw0KICAgICogQWRkZWQgSE1BQyBzdGFydHMvdXBkYXRlL2ZpbmlzaCBzdXBwb3J0IGZ1bmN0aW9ucw0KICAgICogQWRkZWQgdGhlIFNIQS0yMjQsIFNIQS0zODQgYW5kIFNIQS01MTIgaGFzaCBmdW5jdGlvbnMNCiAgICAqIEZpeGVkIHRoZSBuZXRfc2V0XypibG9jayByb3V0aW5lcywgdGhhbmtzIHRvIEFuZHJlYXMNCiAgICAqIEFkZGVkIGEgZmV3IGRlbW9uc3RyYXRpb24gcHJvZ3JhbXM6IG1kNXN1bSwgc2hhMXN1bSwNCiAgICAgIGRoX2NsaWVudCwgZGhfc2VydmVyLCByc2FfZ2Vua2V5LCByc2Ffc2lnbiwgcnNhX3ZlcmlmeQ0KICAgICogQWRkZWQgbmV3IGJpZ251bSBpbXBvcnQgYW5kIGV4cG9ydCBoZWxwZXIgZnVuY3Rpb25zDQogICAgKiBSZXdyb3RlIFJFQURNRS50eHQgaW4gcHJvZ3JhbS9zc2wvY2EgdG8gYmV0dGVyIGV4cGxhaW4NCiAgICAgIGhvdyB0byBjcmVhdGUgYSB0ZXN0IFBLSQ0KDQo9IFZlcnNpb24gMC42IHJlbGVhc2VkIG9uIDIwMDctMDQtMDENCg0KICAgICogQ2lwaGVycyB1c2VkIGluIFNTTC9UTFMgY2FuIG5vdyBiZSBkaXNhYmxlZCBhdCBjb21waWxlDQogICAgICB0aW1lLCB0byByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQgb24gZW1iZWRkZWQgc3lzdGVtcw0KICAgICogQWRkZWQgbXVsdGlwbHkgYXNzZW1ibHkgY29kZSBmb3IgdGhlIFRyaUNvcmUgYW5kIG1vZGlmaWVkDQogICAgICBoYXZlZ2Vfc3RydWN0IGZvciB0aGlzIHByb2Nlc3NvciwgdGhhbmtzIHRvIERhdmlkIFBhdGnxbw0KICAgICogQWRkZWQgbXVsdGlwbHkgYXNzZW1ibHkgY29kZSBmb3IgNjQtYml0IFBvd2VyUENzLA0KICAgICAgdGhhbmtzIHRvIFBla2luZyBVbml2ZXJzaXR5IGFuZCB0aGUgT1NVIE9wZW4gU291cmNlIExhYg0KICAgICogQWRkZWQgZXhwZXJpbWVudGFsIHN1cHBvcnQgb2YgUXVhbnR1bSBDcnlwdG9ncmFwaHkNCiAgICAqIEFkZGVkIHN1cHBvcnQgZm9yIGF1dG9jb25mLCBjb250cmlidXRlZCBieSBBcm5hdWQgQ29ybmV0DQogICAgKiBGaXhlZCAibG9uZyBsb25nIiBjb21waWxhdGlvbiBpc3N1ZXMgb24gSUEtNjQgYW5kIFBQQzY0DQogICAgKiBGaXhlZCBhIGJ1ZyBpbnRyb2R1Y2VkIGluIHh5c3NsLTAuNS90aW1pbmcuYzogaGFyZGNsb2NrDQogICAgICB3YXMgbm90IGJlaW5nIGNvcnJlY3RseSBkZWZpbmVkIG9uIEFSTSBhbmQgTUlQUw0KDQo9IFZlcnNpb24gMC41IHJlbGVhc2VkIG9uIDIwMDctMDMtMDENCg0KICAgICogQWRkZWQgbXVsdGlwbHkgYXNzZW1ibHkgY29kZSBmb3IgU1BBUkMgYW5kIEFscGhhDQogICAgKiBBZGRlZCAoYmV0YSkgc3VwcG9ydCBmb3Igbm9uLWJsb2NraW5nIEkvTyBvcGVyYXRpb25zDQogICAgKiBJbXBsZW1lbnRlZCBzZXNzaW9uIHJlc3VtaW5nIGFuZCBjbGllbnQgYXV0aGVudGljYXRpb24NCiAgICAqIEZpeGVkIHNvbWUgcG9ydGFiaWxpdHkgaXNzdWVzIG9uIFdpbkNFLCBNSU5JWCAzLCBQbGFuOQ0KICAgICAgKHRoYW5rcyB0byBCZW5qYW1pbiBOZXdtYW4pLCBIUC1VWCwgRnJlZUJTRCBhbmQgU29sYXJpcw0KICAgICogSW1wcm92ZWQgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBFREgga2V5IGV4Y2hhbmdlDQogICAgKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB2YWxpZCBwYWNrZXRzIHdpdGggYSBwYXlsb2FkDQogICAgICBzaXplIG9mIDE2Mzg0IGJ5dGVzIHRvIGJlIHJlamVjdGVkDQoNCj0gVmVyc2lvbiAwLjQgcmVsZWFzZWQgb24gMjAwNy0wMi0wMQ0KDQogICAgKiBBZGRlZCBzdXBwb3J0IGZvciBFcGhlbWVyYWwgRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlDQogICAgKiBBZGRlZCBtdWx0aXBseSBhc20gY29kZSBmb3IgU1NFMiwgQVJNLCBQUEMsIE1JUFMgYW5kIE02OEsNCiAgICAqIFZhcmlvdXMgaW1wcm92ZW1lbnQgdG8gdGhlIG1vZHVsYXIgZXhwb25lbnRpYXRpb24gY29kZQ0KICAgICogUmV3cm90ZSB0aGUgaGVhZGVycyB0byBnZW5lcmF0ZSB0aGUgQVBJIGRvY3Mgd2l0aCBkb3h5Z2VuDQogICAgKiBGaXhlZCBhIGJ1ZyBpbiBzc2xfZW5jcnlwdF9idWYgKGluY29ycmVjdCBwYWRkaW5nIHdhcw0KICAgICAgZ2VuZXJhdGVkKSBhbmQgaW4gc3NsX3BhcnNlX2NsaWVudF9oZWxsbyAobWF4LiBjbGllbnQNCiAgICAgIHZlcnNpb24gd2FzIG5vdCBwcm9wZXJseSBzZXQpLCB0aGFua3MgdG8gRGlkaWVyIFJlYmVpeA0KICAgICogRml4ZWQgYW5vdGhlciBidWcgaW4gc3NsX3BhcnNlX2NsaWVudF9oZWxsbzogY2xpZW50cyB3aXRoDQogICAgICBjaXBoZXJsaXN0cyBsYXJnZXIgdGhhbiA5NiBieXRlcyB3ZXJlIGluY29ycmVjdGx5IHJlamVjdGVkDQogICAgKiBGaXhlZCBhIGNvdXBsZSBtZW1vcnkgbGVhayBpbiB4NTA5X3JlYWQuYw0KDQo9IFZlcnNpb24gMC4zIHJlbGVhc2VkIG9uIDIwMDctMDEtMDENCg0KICAgICogQWRkZWQgc2VydmVyLXNpZGUgU1NMdjMgYW5kIFRMU3YxLjAgc3VwcG9ydA0KICAgICogTXVsdGlwbGUgZml4ZXMgdG8gZW5oYW5jZSB0aGUgY29tcGF0aWJpbGl0eSB3aXRoIGcrKywNCiAgICAgIHRoYW5rcyB0byBYb3PpIEFudPNuIE90ZXJvIEZlcnJlaXJhDQogICAgKiBGaXhlZCBhIGJ1ZyBpbiB0aGUgQ0JDIGNvZGUsIHRoYW5rcyB0byBkb3dzdDsgYWxzbywNCiAgICAgIHRoZSBiaWdudW0gY29kZSBpcyBubyBsb25nZXIgZGVwZW5kYW50IG9uIGxvbmcgbG9uZw0KICAgICogVXBkYXRlZCByc2FfcGtjczFfc2lnbiB0byBoYW5kbGUgYXJiaXRyYXJ5IGxhcmdlIGlucHV0cw0KICAgICogVXBkYXRlZCB0aW1pbmcuYyBmb3IgaW1wcm92ZWQgY29tcGF0aWJpbGl0eSB3aXRoIGkzODYNCiAgICAgIGFuZCA0ODYgcHJvY2Vzc29ycywgdGhhbmtzIHRvIEFybmF1ZCBDb3JuZXQNCg0KPSBWZXJzaW9uIDAuMiByZWxlYXNlZCBvbiAyMDA2LTEyLTAxDQoNCiAgICAqIFVwZGF0ZWQgdGltaW5nLmMgdG8gc3VwcG9ydCBBUk0gYW5kIE1JUFMgYXJjaA0KICAgICogVXBkYXRlZCB0aGUgTVBJIGNvZGUgdG8gc3VwcG9ydCA4MDg2IG9uIE1TVkMgMS41DQogICAgKiBBZGRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSBhdCB0aGUgdG9wIG9mIGhhdmVnZS5oDQogICAgKiBGaXhlZCBhIGJ1ZyBpbiBzaGEyX2htYWMsIHRoYW5rcyB0byBuZXdzb2Z0L1dlbmZhbmcgWmhhbmcNCiAgICAqIEZpeGVkIGEgYnVnIHJlcG9ydGVkIGJ5IEFkcmlhbiBS/GVnc2VnZ2VyIGluIHg1MDlfcmVhZF9rZXkNCiAgICAqIEZpeGVkIGEgYnVnIHJlcG9ydGVkIGJ5IFRvcnN0ZW4gTGF1dGVyIGluIHNzbF9yZWFkX3JlY29yZA0KICAgICogRml4ZWQgYSBidWcgaW4gcnNhX2NoZWNrX3ByaXZrZXkgdGhhdCB3b3VsZCB3cm9uZ2x5IGNhdXNlDQogICAgICB2YWxpZCBSU0Ega2V5cyB0byBiZSBkaXNtaXNzZWQgKHRoYW5rcyB0byBvbGR3b2xmKQ0KICAgICogRml4ZWQgYSBidWcgaW4gbXBpX2lzX3ByaW1lIHRoYXQgY2F1c2VkIHNvbWUgcHJpbWVzIHRvIGZhaWwNCiAgICAgIHRoZSBNaWxsZXItUmFiaW4gcHJpbWFsaXR5IHRlc3QNCg0KICAgIEknZCBhbHNvIGxpa2UgdG8gdGhhbmsgWW91buhzIEhhZnJpIGZvciB0aGUgQ1JVWCBsaW51eCBwb3J0LA0KICAgIEtoYWxpbCBQZXRpdCB3aG8gYWRkZWQgWHlTU0wgaW50byBwa2dzcmMgYW5kIEFybmF1ZCBDb3JuZXQNCiAgICB3aG8gbWFpbnRhaW5zIHRoZSBEZWJpYW4gcGFja2FnZSA6LSkNCg0KPSBWZXJzaW9uIDAuMSByZWxlYXNlZCBvbiAyMDA2LTExLTAxDQoNCg==