U2F0IEFwciAgMiAxMzoyNzozMiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHN0Yy9NYWtlZmlsZS5hbTogaW50ZWdyYXRlZCBmaXh1cC10ZXN0cy5weQoKRnJpIEFwciAgMSAxOToxNDoxOCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVkIGEgbGFjayBvZiBjb21tZW50IGFuZCBtaXNzaW5nIHRlc3QgZm9yCgkgIGEgcG9pbnRlciBpbiB0aGUgQVBJLgoKRnJpIEFwciAgMSAxNzo1NDoyMiBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeHN0Yy9maXh1cC10ZXN0cy5weTogQSB0aW55IHNjcmlwdCB0byBmaXh1cCBzb21lIG9mIHRoZSBzY2hlbWEKCSAgZmlsZXMgdXNlZCBmb3IgdGhlIHRlc3RzLgoKRnJpIEFwciAgMSAxNzozMzo1MCBDRVNUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaAoJICByZXN1bHQvc2NoZW1hcy9zcmMtZWxlbWVudDItKi5lcnIgcmVzdWx0L3NjaGVtYXMvZWxlbWVudC0qLmVycjoKCSAgQ29tbWl0dGluZyBhZ2Fpbiwgc2luY2UgdGhlIENWUyBzZXJ2ZXIgYWJvcnRlZC4KCkZyaSBBcHIgIDEgMTU6Mjk6MjcgQ0VTVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBDb3JyZWN0ZWQgJ2xlbmd0aCcgZmFjZXQgdmFsaWRhdGlvbiBmb3IKCSAgUU5hbWVzIGFuZCBub3RhdGlvbnMuIENvcnJlY3RlZCB4bWxTY2hlbWFHZXRDYW5vblZhbHVlOiBzb21lCgkgIGRhdGEgdHlwZXMgZGlkIG5vdCByZXR1cm4gYSB2YWx1ZSBpZiBhbHJlYWR5IGluIG5vcm1hbGl6ZWQKCSAgZm9ybS4KCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDoKCSAgRWxpbWluYXRlZCBjcmVhdGlvbiBvZiBzdHJ1Y3RzIGZvciA8cmVzdHJpY3Rpb24+LCA8ZXh0ZW5zaW9uPiwKCSAgPHNpbXBsZUNvbnRlbnQ+LCA8Y29tcGxleENvbnRlbnQ+LCA8bGlzdD4gYW5kIDx1bmlvbj46IHRoZQoJICBpbmZvcm1hdGlvbiBpcyBub3cgc2V0IGRpcmVjdGx5IG9uIHRoZSBjb3JyZXNwb25kaW5nIHNpbXBsZS8KCSAgY29tcGxleCB0eXBlLiBBZGRlZCBzb21lIG1vcmUgY29tcGxleCB0eXBlIGNvbnN0cmFpbnRzLgoJICBBZGRlZCBmYWNldCBkZXJpdmF0aW9uIGNvbnN0cmFpbnRzLiBJbnRyb2R1Y2VkICJwYXJ0aWNsZSIKCSAgY29tcG9uZW50cywgd2hpY2ggc2VlbSB0byBiZSByZWFsbHkgbmVlZGVkIGlmIGFwcGx5aW5nCgkgIGNvbnN0cmFpbnRzLiBDb3JyZWN0ZWQvY2hhbmdlIHNvbWUgb2YgdGhlIHBhcnNpbmcgZnVuY3Rpb25zLgoJICBUaGlzIGlzIGFsbCBhIGJpdCBzY2FyeSwgc2luY2UgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gdGhlIGNvZGUuCgkqIHJlc3VsdC9zY2hlbWFzL3NyYy1lbGVtZW50Mi0qLmVyciByZXN1bHQvc2NoZW1hcy9lbGVtZW50LSouZXJyOgoJICBBZGFwdGVkIHJlZ3Jlc3Npb24gdGVzdCByZXN1bHRzLgoKRnJpIEFwciAgMSAxNjowNzo1OSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9lbGZnY2NoYWNrLnhzbDogcmV2YW1wZWQgdGhlIGVsZmdjY2hhY2suaCAKCSAgZm9ybWF0IHRvIGNvcGUgd2l0aCBnY2M0IGNoYW5nZSBvZiBhbGlhc2luZyBhbGxvd2VkIHNjb3BlcywgaGFkCgkgIHRvIGFkZCBleHRyYSBpbmZvcm1hdGlvbnMgdG8gZG9jL2xpYnhtbDItYXBpLnhtbCB0byBzZXBhcmF0ZQoJICB0aGUgaGVhZGVyIGZyb20gdGhlIGMgbW9kdWxlIHNvdXJjZS4KCSogKi5jOiB1cGRhdGVkIGFsbCBjIGxpYnJhcnkgZmlsZXMgdG8gYWRkIGEgI2RlZmluZSBib3R0b21feHh4CgkgIGFuZCByZWltcG9ydCBlbGZnY2NoYWNrLmggdGhlcmVhZnRlciwgYW5kIGEgYml0IG9mIGNsZWFudXBzLgoJKiBkb2MvLyogdGVzdGFwaS5jOiByZWdlbmVyYXRlZCB3aGVuIHJlYnVpbGRpbmcgdGhlIEFQSQoKVGh1IE1hciAzMSAxNzoyMDozMiBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2F2ZS5jOiBmaXhlZCBidWcgcmVwb3J0ZWQgYnkgUGV0ciBQYWphcywgaW4gdGhlIGFic2VuY2Ugb2YKCSAgZW5jb2RpbmcgVVRGLTggc2hvdWxkIHJlYWxseSBiZSBhc3N1bWVkLiBUaGlzIG1heSBicmVhayBpZiAKCSAgdGhlIEhUVFAgaGVhZGVycyBpbmRpY2F0ZXMgZm9yIGV4YW1wbGUgSVNPLTg4NTktMSBzaW5jZSB0aGlzCgkgIHRoZW4gYmVjb21lcyBhIHdlbGwgZm9ybWVkbmVzcyBlcnJvci4KClRodSBNYXIgMzEgMTY6NTc6MTggQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXhlZCAjMTcyMjYwIHJlZHVuZGFudCBhc3NpZ25tZW50LgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogZml4ZWQgeG1sU0FYUGFyc2VEb2MoKSBhbmQgCgkgIHhtbFBhcnNlRG9jKCkgc2lnbmF0dXJlcyAjMTcyMjU3LgoKVGh1IE1hciAzMSAxNjoxMToxMCBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeCBwb3RlbnRpYWwgY3Jhc2ggaWYgY3R4dC0+c2F4LT5pZ25vcmFibGVXaGl0ZXNwYWNlCgkgIGlzIE5VTEwgYXMgcmVwb3J0ZWQgYnkgYnVnICMxNzIyNTUKClRodSBNYXIgMzEgMTU6MzY6NTIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgYSBwcm9ibGVtIGluIFJlbGF4LU5HIHZhbGlkYXRpb24gIzE1OTk2OAoJKiB0ZXN0L3JlbGF4bmcvbGlzdC4qIHJlc3VsdC9yZWxheG5nL2xpc3RfKjogYWRkZWQgdGhlIHRlc3QKCSAgdG8gdGhlIHJlZ3Jlc3Npb24gc3VpdGUKClRodSBNYXIgMzEgMTM6MDY6MDIgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogZml4ZWQgYnVnICMxNjg1MDQKClRodSBNYXIgMzEgMTI6MjI6NTQgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiBuYW5vZnRwLmMgbmFub2h0dHAuYyB4bWxsaW50LmMKCSAgbWFjb3Mvc3JjL2NvbmZpZy1tYWMuaDogdXNlIFhNTF9TT0NLTEVOX1QgaW5zdGVhZCBvZiBTT0NLTEVOX1QKCSAgc2luY2UgYXBwYXJlbnRseSBJQk0gY2FuJ3QgYXZvaWQgYnJlYWtpbmcgY29tbW9uIGRlZmluZXMgIzE2NjkyMgoKVGh1IE1hciAzMSAxMDo0MTo0NSBDRVNUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogZml4IHVuaXRpbmlhbGl6ZWQgdmFyaWFibGUgaW4gbm90IGZyZXF1ZW50bHkgdXNlZAoJICBjb2RlIGJ1ZyAjMTcyMTgyCgpUaHUgTWFyIDMxIDAwOjQ1OjE4IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwucHk6IGFub3RoZXIgcGF0Y2ggZnJvbSBCcmVudAoJICBIZW5kcmlja3MgdG8gYWRkIG5ldyBoYW5kbGVycyB3aXRoIHRoZSB2YXJpb3VzIHZhbGlkaXR5IGNvbnRleHRzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvdmFsaWREVEQucHkKCSAgcHl0aG9uL3Rlc3RzL3ZhbGlkUk5HLnB5IHB5dGhvbi90ZXN0cy92YWxpZFNjaGVtYXMucHk6IGFsc28gCgkgIGFkZGVkIHRoZSByZWdyZXNzaW9uIHRlc3RzIGhlIHByb3ZpZGVkCgpXZWQgTWFyIDMwIDA5OjM5OjI3IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYzogYXBwbGllZCBwYXRjaCBmcm9tIEJyZW50CgkgIEhlbmRyaWNrcyB0byBhdm9pZCBsZWFrIGluIHB5dGhvbiBiaW5kaW5ncyB3aGVuIHVzaW5nIHNjaGVtYXMKCSAgZXJyb3IgaGFuZGxlcnMuCgpUdWUgTWFyIDI5IDIyOjI5OjI4IENFU1QgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhpbmcgYnVnIDE2ODE5NiwgPGEgbmFtZT0iIj4gbXVzdCBiZSBVUkkgZXNjYXBlZCB0b28KClN1biBNYXIgMjcgMTM6MjQ6MjQgQ0VTVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogY2xlYW51cCBvZiB0aGUgUHJvcCByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgeG1sTmV3Tm9kZUVhdE5hbWUKCSAgYnkgUm9iIFJpY2hhcmRzCgpUaHUgTWFyIDI0IDE5OjAxOjIyIFBTVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VudGVzdC5weSwgdGVzdGFwaS5jOiBmaXhlZCBwcm9ibGVtIHdpdGggJ21pbmltYWwgbGlicmFyeScKCSAgY29tcGlsYXRpb24gKExJQlhNTF9QQVRURVJOX0VOQUJMRUQgbm90IHByb3Blcmx5IGNoZWNrZWQpIHJlcG9ydGVkCgkgIGJ5IEdyZWcgTW9yZ2FuCgpUaHUgTWFyIDI0IDEyOjAxOjMwIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgY2FsbCB0byBhIGZhY2V0IGVycm9yIHJlcG9ydDogdGhlIHR5cGUgb2YKCSAgdGhlIGVycm9yIHdhcyB3cm9uZywgcmVzdWx0aW5nIGluIGEgc2VnZmF1bHQgKGJ1ZyAjMTcxMjIwLCByZXBvcnRlZAoJICBieSBHVVkgRmFicmljZSkuCgpNb24gTWFyIDIxIDIyOjU4OjM3IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogUmVtb3ZlZCBhIHN0dXBpZCBidWcgaW4geG1sU2NoZW1hVmFsaWRhdGVBdHRyaWJ1dGVzLAoJICBmYWlsaW5nIHRvIGJ1aWxkIGEgbGlua2VkIGxpc3QgY29ycmVjdGx5IChidWcgIzE2OTg5OCwgcmVwb3J0ZWQKCSAgYnkgYmluZyBzb25nLCBobW0uLi4pLgoKTW9uIE1hciAyMSAyMTowOTowNyBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEZpeGVkIGEgc2VnZmF1bHQsIHdoaWNoIG9jY3VyZWQgZHVyaW5nIGJ1YmJsaW5nCgkgIG9mIElEQyBub2RlcyAoYnVnICMxNzA3NzkgYW5kICMxNzA3NzgsIHJlcG9ydGVkIGJ5IEdVWSBGYWJyaWNlKToKCSAgYSB2YXJpYWJsZSB3YXMgbWlzc2VkIHRvIGJlIHJlc2V0IGluIGEgbG9vcC4gRGVhY3RpdmF0ZWQgYnViYmxpbmcsCgkgIGlmIG5vdCByZWZlcmVuY2VkIGJ5IGEga2V5cmVmLgoKU3VuIE1hciAyMCAxMToxMzowMiBQU1QgMjAwNSBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoJCgkqIGMxNG4uYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBzcGVjaWFsIGNhc2UgIkRBVjoiIG5hbWVzcGFjZQoJaW4gYzE0biByZWxhdGl2ZSBuYW1lc3BhY2VzIGNoZWNrIGFuZCBhZGQgc3RydWN0dXJlZCBlcnJvciBtZXNzYWdlcwoJdG8gYzE0biBjb2RlCgpUaHUgTWFyIDE3IDEyOjU1OjIzIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogUmVtb3ZlZCBpbmhlcml0YW5jZSBvZiAibWl4ZWQiIGNvbnRlbnQgdHlwZSBmb3IKCSAgc2hvcnQtaGFuZCByZXN0cmljdGlvbnMgb2YgImFueVR5cGUiIChyZXBvcnRlZCBieSBHdXkgRmFicmljZQoJICB0byB0aGUgbWFpbGluZyBsaXN0KS4gQWRkZWQgdGhlIG5hbWVzcGFjZSBjb252ZXJzaW9uIChjaGFtZWxlb24KCSAgaW5jbHVkZXMpIGZvciB0aGUgYmFzZSB0eXBlIHJlZmVyZW5jZSBvZiA8cmVzdHJpY3Rpb24+IGFuZAoJICA8ZXh0ZW5zaW9uPi4KCSogdGVzdC9zY2hlbWFzL2J1ZzE1MjQ3MF8xLnhzZDogQWRhcHRlZCBkdWUgdG8gdGhlIGFib3ZlIGNoYW5nZQoJICBvZiAibWl4ZWQiIGluaGVyaXRhbmNlLgoKVGh1IE1hciAxNyAxMTowMzo1OSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIGEgPSAtPiA9PSBlcnJvciBwb2ludGVkIGJ5IEdVWSBGYWJyaWNlCgpXZWQgTWFyIDE2IDIyOjUzOjUzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogbW9yZSBkZWJ1ZyBtZXNzYWdlcyBmcm9tIE1hdHRoZXcgQnVyZ2VzcwoJKiB4bWxzY2hlbWFzdHlwZXMuYzogeG1sU2NoZW1hVmFsaWRhdGVMZW5ndGhGYWNldCBBUEkgbWlzc2luZyBjaGVjay4KCldlZCBNYXIgMTYgMTc6Mzc6MDQgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IEFhYWFubm5kIHB1dHRpbmcgYmFjayB0aGUgcHJldmlvdXMgY2hhbmdlcyBkb25lCgkgIGJ5IERhbmllbCwgd2hpY2ggSSBvdmVyd3JvdGUgd2l0aCB0aGUgcHJldmlvdXMgY29tbWl0LgoKV2VkIE1hciAxNiAxNzoyMDoyNSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6CgkgIEhvcGVmdWxseSBmaW5pc2hlZCB2YWxpZGF0aW9uIGFnYWluc3QgZmFjZXRzIHRvIHVzZSB0aGUgbm9ybWFsaXplZAoJICB2YWx1ZSBvZiBib3RoLCB0aGUgZmFjZXRzIGFuZCBpbnN0YW5jZSB2YWx1ZXMuIEFkZGVkIAoJICB4bWxTY2hlbWFWYWxpZGF0ZUxlbmd0aEZhY2V0V2h0c3AoKSwgeG1sU2NoZW1hVmFsaWRhdGVGYWNldFdodHNwKCkKCSAgYW5kIHhtbFNjaGVtYUdldFZhbFR5cGUoKSB0byB0aGUgc2NoZW1hIEFQSS4KCldlZCBNYXIgMTYgMTM6NTU6MzEgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGRvIG5vdCBwYWNrYWdlIC5sYSBmaWxlcwoJKiB4bWxsaW50LmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBHZXJyeSBNdXJwaHkgZm9yIHhtbGxpbnQgcmV0dXJuIGNvZGUKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeGVkIGEgY291cGxlIG9mIG1pc3NpbmcgdGVzdHMgb2YgcGFyYW1ldGVycwoJICBhdCBwdWJsaWMgQVBJIGVudHJ5IHBvaW50cy4KClR1ZSBNYXIgMTUgMjM6MzE6MTQgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYSBjb3VwbGUgb2YgbW9yZSBjaGFuZ2VzIHRvIHZhcmlvdXMKCSAgZGVjaW1hbC1oYW5kbGluZyByb3V0aW5lcy4gIEZpeGVzIHB5dGhvbiBzb21lIHByb2JsZW1zCgkgIHR1cm5lZCB1cCBieSB0aGUgcHl0aG9uIHRlc3RzLgoJKiBNYWtlZmlsZS5hbTogY2hhbmdlIFNjaGVtYXNQeXRob25UZXN0cyBtZXNzYWdlIHRvIHdhcm4KCSAgdGhhdCB0aGVyZSBhcmUgMTAgJ2V4cGVjdGVkJyBlcnJvcnMgKHJhdGhlciB0aGFuIDYpIHNpbmNlCgkgIHdlIG5vdyByZWplY3QgYSAnKycgc2lnbiBvbiBhbiB1bnNpZ25lZC4KClR1ZSBNYXIgMTUgMTU6NDM6MjcgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hc3R5cGVzLmMgeG1sc2NoZW1hc3R5cGVzLmg6IEluIHByZXBhcmF0aW9uIHRvIHVzZQoJICBub3JtYWxpemVkIHZhbHVlcyBvZiBmYWNldHMgZHVyaW5nIHZhbGlkYXRpb246IGNoYW5nZWQgdGhlCgkgIGFyZ3VtZW50cyBvZiBzb21lIHN0cmluZyBjb21wYXJpc29uIGZ1bmN0aW9uczsgYWRkZWQgYSBzdGF0aWMKCSAgeG1sU2NoZW1hVmFsaWRhdGVGYWNldEludGVybmFsKCkgd2l0aCBtb3JlIGFyZ3VtZW50cyB0byBiZQoJICBtb3JlIGZsZXhpYmxlLiBQcmVwYXJlZCBYTUxfU0NIRU1BX0ZBQ0VUX0VOVU1FUkFUSU9OIHZhbGlkYXRpb24KCSAgdG8gdXNlIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9ucy4gRml4ZWQgc29tZSBhc3NpZ25tZW50cyBpbgoJICB4bWxTY2hlbWFWYWxBdG9taWNUeXBlKCk6IHRvdGFsIGRpZ2l0IGNvdW50LCBsbywgbWksIGhpLgoKU3VuIE1hciAxMyAxOTozMjowMyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGNvbmZpZ3VyZS5pbiB0ZXN0YXBpLmMgZG9jLyo6IHByZXBhcmluZyByZWxlYXNlIG9mIDIuNi4xOAoJICB1cGRhdGVkIGRvY3MgYW5kIHJlYnVpbHQKCSogbGlieG1sLnNwZWMuaW46IHJlYWN0aXZhdGVkIGdjYyBwcm9maWxpbmcgZm9yIGdjYyA+PSA0LjAuMAoKU2F0IE1hciAxMiAxOTo1MDoyMiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiByZW1vdmVkIGEgc3RhdGljIGJ1ZmZlciBpbiB4bWxCeXRlQ29uc3VtZWQoKSwKCSAgYXMgcG9pbnRlZCBieSBCZW4gTWF1cmVyLCBmaXhlcyAjMTcwMDg2CgkqIHhtbHNjaGVtYXMuYzogcmVtb3ZlIGEgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBwb2ludGVyIHdhcm5pbmcKCkZyaSBNYXIgMTEgMjM6NTM6MTMgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZW5oYW5jZWQgdGhlIHBhcnNpbmcgb2YgWE1MX1NDSEVNQVNfREVDSU1BTAoJICBhbmQgbXVjaCBvZiB0aGUgcm91dGluZSB4bWxTY2hlbWFDb21wYXJlRGVjaW1hbHMuICBUaGUKCSAgY2hhbmdlcyB3ZXJlIG5lY2Vzc2FyeSB0byBmaXggYSBwcm9ibGVtIHJlcG9ydGVkIG9uIHRoZQoJICBtYWlsaW5nIGxpc3QgYnkgSm9obiBIb2NrYWRheS4KCkZyaSBNYXIgMTEgMTM6MjI6NTIgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBUaGUgc2NoZW1hIHBhcnNlciB3aWxsIHN0b3AgaWYgY29tcG9uZW50cyBjb3VsZAoJICBub3QgYmUgcmVzb2x2ZWQuIFRoaXMgaXMgbm90IGNvbmZvcm1pbmcgdG8gdGhlIHNwZWMgYnV0IGZvciBub3cKCSAgd2lsbCBhdm9pZCBpbnRlcm5hbCBlcnJvcnMgZHVyaW5nIHR5cGUgZml4dXAgYW5kIGNvbnRlbnQgbW9kZWwKCSAgY3JlYXRpb24uIFJlc3RydWN0dXJlZCBpbmNsdXNpb24vaW1wb3J0IG9mIHNjaGVtYXRhOiB0aGlzIGF2b2lkcwoJICBkdXBsaWNhdGUsIHNlbGYgYW5kIGNpcmN1bGFyIGluY2x1c2lvbi4gQ2hhbWVsZW9uIGluY2x1ZGVzIGFyZQoJICBzdGlsbCB3b3JrYXJvdW5kZWQuIEFkZGVkIHJlc3RyaWN0aW9uIHRvIGRpc2FsbG93IHJlZmVyZW5jZXMgdG8KCSAgbm9uLWltcG9ydGVkIG5hbWVzcGFjZXMuIENvcnJlY3RlZCBwYXJzaW5nIG9mIDxncm91cD4uCgkqIHJlc3VsdC9zY2hlbWFzL2J1ZzE2Nzc1NF8wXzAqOiBBZGRlZCBhIG1pc3NpbmcgdGVzdCByZXN1bHQuCgpUaHUgTWFyIDEwIDE2OjAyOjE3IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy94bWwuaHRtbCBkb2MvZW5jb2RpbmcuaHRtbDogRW5yaWNoZWQgZW5jb2RpbmcuaHRtbCB3aXRoIG1vcmUKCSAgbGluayBhbmQgZm9yZXdvcmQgd2FybmluZyB0byBhdm9pZCBwcm9ibGVtIHdpdGggaWdub3JhbnQKCSAgcHJvZ3JhbW1lcnMsIGMuZiAjMTY5NzIxCgpUaHUgTWFyIDEwIDE1OjAxOjM0IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVybmV4dC5weTogYWRkZWQKCSAgYSByZWdyZXNzaW9uIHRlc3QgZnJvbSBSb2IgUmljaGFyZHMgZm9yIHRoZSBwcmV2aW91cyBidWcKClRodSBNYXIgMTAgMTM6MjI6MzYgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGFwcGxpZWQgZml4IGZvciB4bWxUZXh0UmVhZGVyTmV4dCgpIGJ1ZyBmcm9tCgkgIFJvYiBSaWNoYXJkcwoKVGh1IE1hciAxMCAxMTozNTo1NyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtb2R1bGUuYzogc2Vjb25kIHBhdGNoIGZyb20gUmljayBKb25lcywgcG9ydGFiaWxpdHkgZml4IGZvcgoJICBIUC1VWAoJKiBkb2MvZXhhbXBsZXMveHBhdGgxLmMgZG9jL2V4YW1wbGVzL3hwYXRoMi5jOiBmaXJzdCBmaXggZnJvbSBSaWNrIEpvbmVzCgkgIHRvIGF2b2lkIHdhcm5pbmdzLgoKVGh1IE1hciAxMCAxMDoyMDoyMyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9oYXNoLmggbGlieG1sLmggbGlieG1sLnNwZWMuaW46IHNvbWUgZ2NjNCBwb3J0YWJpbGl0eQoJICBwYXRjaGVzLCBpbmNsdWRpbmcgYSBzZXJpb3VzIGFsaWFzaW5nIGJ1ZyBleHBvc2VkIGluIHMzOTAgCgkgIHdoZW4gdHJ5aW5nIHRvIGNvbnZlcnQgZGF0YSBwb2ludGVyIHRvIGNvZGUgcG9pbnRlci4KCk1vbiBNYXIgIDcgMTg6MzQ6MDAgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBUaW55IHJlc3RydWN0dXJpbmcgb2YgdGhlIHZhbGlkYXRpb24gc3RhcnQtdXAKCSAgZnVuY3Rpb25zLiBBZGRlZCBjbGVhbnVwIG9mIHRoZSB2YWxpZGF0aW9uIGNvbnRleHQgYXQgdGhlCgkgIGVuZCBvZiB2YWxpZGF0aW9uLiBUaGlzIHRha2VzIGNhcmUgb2YgdGhlIHZhbGlkYXRpb24gY29udGV4dAoJICBiZWluZyByZXVzZWQuCgpNb24gTWFyICA3IDEyOjEyOjAxIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBUaW55IGNoYW5nZXMgaW4gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25zCgkgIEkgZm9yZ290IHRvIGNvbW1pdCBsYXN0IHRpbWUuCgpGcmkgTWFyICA0IDIyOjUxOjQyIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQWRkZWQgSURDIHZhbGlkYXRpb24gb2YgYW55U2ltcGxlVHlwZSBhdHRyaWJ1dGUKCSAgdmFsdWVzOyBhbnl3YXkgdGhlIElEQyBrZXkgY29tcGFyaXNvbiBpcyByZXN0cmljdGVkIHRvCgkgIGFueVNpbXBsZVR5cGUgPC0tPiBzdHJpbmcgYmFzZWQgdHlwZXMuIEZvciBvdGhlciB0eXBlcyB3ZQoJICB3b3VsZCBwb3NzaWJseSBuZWVkIHRoZSBjYW5vbmljYWwgbGV4aWNhbCByZXByZXNlbnRhdGlvbiBvZgoJICB0aGVtOyB0aGlzIHNvdW5kcyBub3QgcGVyZm9ybWFudCwgc2luY2Ugd2Ugd291bGQgbmVlZCB0bwoJICBidWlsZCBzdWNoIGEgcmVwcmVzZW50YXRpb24gZWFjaCB0aW1lIHdlIHdhbnQgdG8gY29tcGFyZSBhZ2FpbnN0CgkgIGFueVNpbXBsZVR5cGUuIFRPRE86IHRoaW5rIGFib3V0IGJ1ZmZlcmluZyB0aGUgY2Fub25pY2FsIHZhbHVlcwoJICBzb21ld2hlcmUuIEZpeGVkIGVycm9yIHJlcG9ydHMgZm9yIGRlZmF1bHQgYXR0cmlidXRlcyB0byB3b3JrCgkgIHdpdGhvdXQgYSBub2RlIGJlaW5nIHNwZWNpZmllZC4gVGhpcyBhbGwgYW5kIHRoZSBlbmFibGluZyBvZiBJREMKCSAgdmFsaWRhdGlvbiBmaXhlcyBidWcgIzE2NTM0NiAocmVwb3J0ZWQgYnkgQmVub2l0IEdyP2dvaXJlIC0gY291bGQKCSAgbm90IHJlYWQgaGlzIGxhc3QgbmFtZSBjb3JyZWN0bHkgZnJvbSBidWd6aWxsYSkuCgpGcmkgTWFyICA0IDE4OjU3OjQ0IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRW5hYmxlZCBJREMgcGFyc2luZyBhbmQgdmFsaWRhdGlvbi4KCSogeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6IAoJICBBZGRlZCB4bWxTY2hlbWFDb3B5VmFsdWUgdG8gdGhlIEFQSTsgdGhpcyB3YXMgZG9uZSBkdWUgdG8KCSAgdmFsaWRhdGlvbiBvZiBkZWZhdWx0IGF0dHJpYnV0ZXMgYWdhaW5zdCBJRENzOiBzaW5jZSBJREMga2V5cwoJICBjb25zdW1lIHRoZSBwcmVjb21wdXRlZCB2YWx1ZSwgb25lIG5lZWRzIGEgY29weS4KCSogcGF0dGVybi5jOiBFbmFibGVkIElEQyBzdXBwb3J0OyB0aGlzIGlzIGN1cnJlbnRseSBkb25lCgkgIHZpYSBjYWxsaW5nIHhtbFBhdHRlcm5jb21waWxlIHdpdGggYSBmbGFnIGFyZyBvZiAxLgoKV2VkIE1hciAgMiAxMTo0NToxOCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBkb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtCgkgIHhzdGMvTWFrZWZpbGUuYW06IHRyeSB0byBmaXggYSBwcm9ibGVtIHdpdGggdmFsZ3JpbmQuCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbQoJICBweXRob24vdGVzdHMvdHN0bWVtLnB5OiBhcHBsaWVkIG1lbW9yeSBsZWFrIGZpeCBmcm9tIEJyZW50IEhlbmRyaWNrcwoJICBjLmYuIGJ1ZyAjMTY1MzQ5CgpNb24gRmViIDI4IDExOjE4OjI0IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRyZWUuYzogQ2hhbmdlZCB4bWxTZWFyY2hOc0J5SHJlZiB0byBjYWxsIHhtbE5zSW5TY29wZSB3aXRoCgkgIHRoZSBwcmVmaXggaW5zdGVhZCBvZiB0aGUgbmFtZXNwYWNlIG5hbWUuCgkqIHRlc3Qvc2NoZW1hcy9hbm5vdC1lcnJfMC54c2QgdGVzdC9zY2hlbWFzL2VsZW1lbnQtZXJyXzAueHNkOgoJICBBZGFwdGVkIGludmFsaWQgdmFsdWVzIG9mIHRoZSAiaWQiIGF0dHJpYnV0ZSwgc2luY2UgdGhleSBhcmUKCSAgdmFsaWRhdGVkIG5vdy4KCkZyaSBGZWIgMjUgMDg6MzE6MTYgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGhyZWFkcy5jOiBuZXcgdmVyc2lvbiB3aXRoIGZpeGVzIGZyb20gUm9iIFJpY2hhcmRzCgpUaHUgRmViIDI0IDE2OjM3OjUxIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRocmVhZHMuYzogYXBwbGllZCBwYXRjaCBmcm9tIFJpY2ggU2FseiBmb3IgbXVsdGl0aHJlYWRpbmcgb24KCSAgV2luZG93cy4KCldlZCBGZWIgMjMgMTU6MDQ6NDYgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmM6IGFwcGxpZWQgYSBwYXRjaCBmcm9tIFJvYiBSaWNoYXJkcyBmaXhpbmcgYSBjb3VwbGUKCSAgb2YgYnVncyBpbiB0aGUgd3JpdGVyCgpNb24gRmViIDIxIDIxOjUxOjAzIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2F2ZS5jOiBmaXhlZCBwcm9ibGVtIHdoZW4gWE1MTElOVF9JTkRFTlQgd2FzIGVtcHR5IChidWcgMTY4MDMzKS4KCSogeHBhdGguYzogZml4ZWQgY29tcGlsYXRpb24gd2FybmluZywgbm8gY2hhbmdlIHRvIGxvZ2ljLgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgY29tcGlsYXRpb24gd2FybmluZywgbm8gY2hhbmdlIHRvIGxvZ2ljLgoKTW9uIEZlYiAyMSAxNDo0ODoyNyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWx3cml0ZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIFJvYiBSaWNoYXJkcyB0byBmaXggYSBwcm9ibGVtIHdpdGgKCSAgeG1sVGV4dFdyaXRlclN0YXJ0QXR0cmlidXRlTlMKCk1vbiBGZWIgMjEgMTE6NDE6NDEgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jIHhwYXRoLmM6IGZpeGVkIHJlbWFpbmluZyBrbm93biBidWdzIGluIHRoZSBYUGF0aCBzdHJlYW1pbmcsCgkgIGFuZCBzd2l0Y2hlZCBYUGF0aCB0byB1c2UgaXQgYnkgZGVmYXVsdCB3aGVuIHBvc3NpYmxlCgpTYXQgRmViIDE5IDE5OjI1OjE0IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhIGJpdCBvZiBjbGVhbnVwCgkqIGVsZmdjY2hhY2suaCB0ZXN0YXBpLmMgZG9jLyo6IHJlYnVpbHQgdGhlIEFQSSB0aGUgdGVzdHMgYW5kCgkgIHRoZSBkb2N1bWVudGF0aW9uIGFzIGEgcmVzdWx0LgoKRnJpIEZlYiAxOCAyMDozNDowMyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogYXBwbGllZCBwYXRjaCBmcm9tCgkgIEFyb24gU3RhbnN2aWsgdG8gYWRkIHhtbFRleHRSZWFkZXJCeXRlQ29uc3VtZWQoKQoJKiB0ZXN0UmVhZGVyLmM6IGFkZGVkIGEgdGVzdCBvcHRpb24KCSogeG1sc2NoZW1hc3R5cGVzLmM6IGZpeCBhIGxhY2sgb2YgcG9pbnRlciBjaGVja2luZyBpbiBBUElzCgpGcmkgRmViIDE4IDEyOjQxOjEwIENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHRlc3Qvc2NoZW1hcy9idWcxNjc3NTRfMCo6IEFkZGVkIHRoZSByZWdyZXNzaW9uIHRlc3Qgb2YgRnJhbnMKCSAgRW5nbGljaCBmb3IgYnVnICMxNjc3NTQuCgpGcmkgRmViIDE4IDEyOjMxOjQ5IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogU3RhcnRlZCBzdXBwb3J0IGZvciBJREMgcmVzb2x1dGlvbiB0byBkZWZhdWx0CgkgIGF0dHJpYnV0ZXMuIElmIGJ1aWxkaW5nIHRoZSBjb250ZW50IG1vZGVsIGZvciA8YWxsPjogZW5zdXJlZAoJICB0byBwdXQgZWxlbWVudCBkZWNsYXJhdGlvbnMgYW5kIG5vdCB0aGUgcGFydGljbGVzIGludG8gdGhlCgkgIGNvbnRlbnQgbW9kZWwgYXV0b21hdG9uICh0aGlzIHdhcyBidWcgIzE2Nzc1NCwgcmVwb3J0ZWQgYnkKCSAgRnJhbnMgRW5nbGljaCkuCgpUaHUgRmViIDE3IDIyOjMxOjU4IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHBhdHRlcm4uYyBwYXR0ZXJuLmg6IFNvbWUgZXhwZXJpbWVudGFsIGFkZGl0aW9uIGZvciBwYXJzaW5nCgkgIG9mIGV4cHJlc3Npb25zIGFuZCBzdHJlYW1hYmxlIHZhbGlkYXRpb24uCgkgIEFkZGVkIHhtbFN0cmVhbVB1c2hBdHRyIHRvIHRoZSBBUEkuCgpUaHUgRmViIDE3IDE5OjU3OjM1IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQWRkZWQgdmFsaWRhdGlvbiBmb3IgdGhlIGF0dHJpYnV0ZSAiaWQiIGluIHRoZQoJICBzY2hlbWF0YTsgZG9pbmcgdGhpcyBuZWVkZWQgZXJyb3IgcmVwb3J0IGZpeGVzIGZvciBub3RhdGlvbnMsCgkgIGZhY2V0cyBhbmQgZ3JvdXAuIENoYW5nZWQgTk9UQVRJT04gdmFsaWRhdGlvbiB0byB3b3JrIHdpdGggdGhlCgkgIGRlY2xhcmVkIE5PVEFUSU9OcyBpbiB0aGUgc2NoZW1hOyB0aGlzIGRvZXMgaGF2ZSBubyBpbXBhY3Qgb24KCSAgdGhlIHZhbGlkYXRpb24gdmlhIHRoZSByZWxheG5nIG1vZHVsZS4KCSogeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmg6CgkgIEFkZGVkIHhtbFNjaGVtYU5ld05PVEFUSU9OVmFsdWUgdG8gdGhlIEFQSSB0byBiZSBhYmxlIHRvIGRvCgkgIHRoZSBOT1RBVElPTiB2YWxpZGF0aW9uIGRlc2NyaWJlZCBhYm92ZS4KCSogdGVzdC9zY2hlbWFzL2VsZW1lbnQtZXJyXzAueHNkIHRlc3Qvc2NoZW1hcy9hbm5vdC1lcnJfMC54c2Q6CgkgIEZpeGVkIHRoZSB2YWx1ZXMgb2YgdGhlICJpZCIgYXR0cmlidXRlcywgd2hpY2ggd2VyZSBub3QgdmFsaWRhdGVkCgkgIHByZXZpb3VzbHkuICAKClRodSBGZWIgMTcgMTI6MDM6NDYgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBGaXhlZCBjb21wYXJpc29uIGZvciBkZWZhdWx0L2ZpeGVkIGF0dHJpYnV0ZQoJICB2YWx1ZXMsIGlmIHRoZSB0eXBlIHdhcyAneHNkOnN0cmluZycuIENoYW5nZWQgdGhlIGNvbXBhcmlzb24KCSAgZm9yIElEQ3MgdG8gdXNlIHRoZSB3aGl0ZXNwYWNlIGF3YXJlIGNvbXBhcmlzb24gZnVuY3Rpb24uCgkqIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOgoJICBBZGRlZCB4bWxTY2hlbWFHZXRDYW5vblZhbHVlLCB4bWxTY2hlbWFOZXdTdHJpbmdWYWx1ZSBhbmQKCSAgeG1sU2NoZW1hQ29tcGFyZVZhbHVlc1dodHNwIHRvIHRoZSBBUEkuIEFkZGVkIGZ1bmN0aW9ucwoJICB0byBjb21wYXJlIHN0cmluZ3Mgd2l0aCB3aGl0ZXNwYWNlIGNvbWJpbmF0aW9ucyBvZiAicHJlc2VydmUiLAoJICAicmVwbGFjZSIgYW5kICJjb2xsYXBzZSIuCgpXZWQgRmViIDE2IDEzOjI0OjM1IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRnVydGhlciB3b3JrIG9uIElEQ3MsIGVzcGVjaWFsbHkgZXZhbHVhdGlvbiBmb3IKCSAgYXR0cmlidXRlIG5vZGVzLgoKV2VkIEZlYiAxNiAwMToxOToyNyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBmaXggdGhlIGNvbW1lbnQgdG8gZGVzY3JpYmUgdGhlIHJlYWwgcmV0dXJuIHZhbHVlcwoJKiBwYXR0ZXJuLmMgeHBhdGguYyBpbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmg6IGxvdCBvZiB3b3JrIG9uCgkgIHRoZSBwYXR0ZXJucywgcGx1Z2dpbiBpbiB0aGUgWFBhdGggZGVmYXVsdCBldmFsdWF0aW9uLCBidXQKCSAgZGlzYWJsZWQgcmlnaHQgbm93IGJlY2F1c2UgaXQncyBub3QgeWV0IGdvb2QgZW5vdWdoIGZvciBYU0xULgoJICBwYXR0ZXJuLmggc3RyZWFtaW5nIEFQSSBhcmUgbGlrZWx5IHRvIGJlIGNoYW5nZWQgdG8gaGFuZGxlCgkgIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocyBpbiB0aGUgc2FtZSBleHByZXNzaW9uLgoKVHVlIEZlYiAxNSAxNTozMzozMiBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEFkZGVkIElEQyBldmFsdWF0aW9uIGZvciBhdHRyaWJ1dGUgbm9kZXMuCgkgIE1hZGUgJ25pbCdlZCBlbGVtZW50cyB3b3JrLiBBZGRlZCBhIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UKCSAgZm9yICdzdHJpY3QnIGF0dHJpYnV0ZSB3aWxkY2FyZHMuCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IEFkZGVkIGFuIGVycm9yIGNvZGUgZm9yCgkgIHdpbGRjYXJkcy4KCSogcmVzdWx0L3NjaGVtYXMvYW55QXR0ci1wcm9jZXNzQ29udGVudHMtZXJyMV8wXzAuZXJyOiBBZGFwdGVkLiAgCgpTdW4gRmViIDEzIDE2OjE1OjAzIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCVRoaXMgY2hhbmdlIHN0YXJ0ZWQgb3V0IGFzIGEgc2ltcGxlIGRlc2lyZSB0byBzcGVlZCB1cCB0aGUKCWV4ZWN1dGlvbiB0aW1lIG9mIHRlc3RhcGkuYywgd2hpY2ggd2FzIGJlaW5nIGRlbGF5ZWQgYnkKCW5hbWVzZXJ2ZXIgcmVxdWVzdHMgZm9yIG5vbi1leGlzdGVudCBVUkwncy4gIEZyb20gdGhlcmUgaXQKCWp1c3Qgc29ydCBvZiBncmV3LCBhbmQgZ3Jldy4uLi4KCSogbmFub2h0dHAuYywgbmFub2Z0cC5jOiBjaGFuZ2VkIHRoZSBwcm9jZXNzaW5nIG9mIFVSTCdzCgkgIHRvIHVzZSB0aGUgdXJpLmMgcm91dGluZXMgaW5zdGVhZCBvZiBjdXN0b20gY29kZS4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYWRkZWQgY29kZSBYTUxfRlRQX1VSTF9TWU5UQVgKCSogdXJpLmM6IGFkZGVkIGFjY2VwdGluZyBpcFY2IGFkZHJlc3NlcywgaW4gYWNjb3JkYW5jZSB3aXRoCgkgIFJGQydzIDI3MzIgYW5kIDIzNzMgKFRPRE86IGFsbG93IGlwVjQgd2l0aGluIGlwVjYpCgkqIGdlbnRlc3QucHksIHRlc3RhcGkuYzogZml4ZWQgYSBmZXcgcHJvYmxlbXMgd2l0aCB0aGUKCSAgdGVzdGluZyBvZiB0aGUgbmFub2Z0cCBhbmQgbmFub2h0dHAgcm91dGluZXMuCgkqIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaDogbWlub3IgY2hhbmdlIHRvIGZpeCBhCgkgIHdhcm5pbmcgb24gdGhlIGRvY3MgZ2VuZXJhdGlvbgoJKiByZWdlbmVyYXRlZCB0aGUgZG9jcwoKU2F0IEZlYiAxMiAwOTowNzoxMSBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIHhtbFhJbmNsdWRlUGFyc2VGaWxlIHRvIHByZXZlbnQKCSAgb3ZlcndyaXRpbmcgWE1MX0NPTVBMRVRFX0FUVFJTIHdoZW4gc2V0dGluZyBwY3R4dC0+bG9hZHN1YnNldAoJICAoYnVnIDE2NjE5OSkKCSogTWFrZWZpbGUuYW0sIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSwgeHN0Yy9NYWtlZmlsZS5hbTogYWRkZWQKCSAgY29kZSB0byBhZGQgJCh0b3BfYnVpbGRkaXIpLy5saWJzIHRvIExEX0xJQlJBUllfUEFUSCB3aGVuZXZlcgoJICBQWVRIT05QQVRIIGlzIHNldCwgdG8gYXNzdXJlIG5ldyBsaWJ4bWwyIHJvdXRpbmVzIGFyZSB1c2VkLgoKRnJpIEZlYiAxMSAyMjoyMDo0MSBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtIHdoZW4gbm8gaW5pdGlhbCAiY2h1bmsiIHdhcwoJICBnaXZlbiB0byB4bWxDcmVhdGVQdXNoUGFyc2VyIChidWcgMTYyNjEzKQoKRnJpIEZlYiAxMSAxODozNzoyMiBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRpY3QuYzogZml4ZWQgY29tcGlsYXRpb24gd2FybmluZwoJKiBwYXJzZXIuYzogY2hhbmdlZCB4bWxXYXJuaW5nTXNnIHNvIGN0eHQtPmVyck5vIGlzIG5vdCBzZXQKCSogeG1sbGludC5jOiBjaGFuZ2VkIHRvIHJldHVybiBub24temVybyBzdGF0dXMgaWYgZXJyb3IKCSAgb24geGluY2x1ZGUgcHJvY2Vzc2luZwoJKiB4bWxzYXZlLmM6IG1pbm9yIGRlbGV0aW9uIG9mIGEgcmVkdW5kYW50IGNvbmRpdGlvbiBzdGF0ZW1lbnQKCQpXZWQgRmViICA5IDE3OjQ3OjQwIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCB0byB4bWxTZXROc1Byb3AgZnJvbSBNaWtlIEhvbW1leQoKU3VuIEZlYiAgNiAwMDoxNzo1NyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmMgeG1sbGludC5jOiBmaXhlZCBpbXBsZW1lbnRhdGlvbiBmb3IgfAoJKiB0ZXN0L3BhdHRlcm4vY29uai4qIHJlc3VsdC9wYXR0ZXJuL2Nvbmo6IGFkZGVkIGEgc3BlY2lmaWMgcmVncmVzc2lvbgoJICB0ZXN0CgpTYXQgRmViICA1IDE4OjM2OjU2IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYzogZmlyc3QgaW1wbGVtZW50YXRpb24gZm9yIHwgc3VwcG9ydAoKU2F0IEZlYiAgNSAxNDo1ODo0NiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmM6IGZpeGVkIHRoZSBuYW1lc3BhY2VzIHN1cHBvcnQKCSogdHJlZS5jOiBmaXhlZCB4bWxHZXROb2RlUGF0aCB3aGVuIG5hbWVzcGFjZXMgYXJlIHVzZWQKCSogcmVzdWx0L3BhdHRlcm4vbXVsdGlwbGUgcmVzdWx0L3BhdHRlcm4vbmFtZXNwYWNlcwoJICB0ZXN0L3BhdHRlcm4vbXVsdGlwbGUuKiB0ZXN0L3BhdHRlcm4vbmFtZXNwYWNlcy4qOiBhZGRlZAoJICBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMKCkZyaSBGZWIgIDQgMTg6MjY6NDMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCBvbmUgaW50ZXJuYWwgZnVuY3Rpb24KCSogZG9jL01ha2VmaWxlLmFtIGRvYy93aWtpLnhzbDogYXBwbGllZCBwYXRjaCBmcm9tIEpvZWwgUmVlZAoJKiB0ZXN0YXBpLmMgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvbGlieG1sMi1yZWZzLnhtbDogcmVnZW5lcmF0ZWQKCkZyaSBGZWIgIDQgMDA6MjU6NDMgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IHVzZSB0aGUgd2Fsa2VyIHRvIHRlc3QgdGhlIHBhdHRlcm5zIGluc3RlYWQgb2YKCSAgdGhlIG5vcm1hbCByZWFkZXIKCSogcGF0dGVybi5jIHhtbGxpbnQuYzogYnVnIGZpeGVzIGluIHRoZSB0cmFpbiBpbmNsdWRpbmcgZml4aW5nIHRoZQoJICBzdHVwaWQgYnVpbGQgYnJlYWsuCgpUdWUgRmViICAxIDE4OjE1OjUyIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYzogbW9yZSBidWcgZml4ZXMgZm9yIHRoZSBYUGF0aCBzdHJlYW1pbmcgY29kZS4KCk1vbiBKYW4gMzEgMTc6NTk6MjQgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBJbnRlZ3JhdGVkIHRoZSBzdHJlYW1pbmcgcGF0dGVybiBmcm9tIHRoZQoJICBwYXR0ZXJuIG1vZHVsZS4gRml4ZWQgc29tZSBJREMgY29kZSBidWdzLiBDaGFuZ2VkCgkgIGZhbGxiYWNrIGZvciBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gYWRkaXRpb24gdG8gd29yayBsaWtlIGZvcgoJICBlbGVtZW50IGRlY2xhcmF0aW9ucy4JCgpNb24gSmFuIDMxIDAxOjI3OjIyIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYyB4bWxsaW50LmM6IGJ1Z2ZpeGVzIGFyb3VuZCB0aGUgc3RyZWFtaW5nIHBhdHRlcm5zCgpTdW4gSmFuIDMwIDIzOjM1OjE5IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiByZXN1bHQvcGF0dGVybi9zaW1wbGUgCgkgIHRlc3QvcGF0dGVybi9zaW1wbGUuKjogYWRkZWQgZmlyc3QgdGVzdCBmb3IgdGhlIHBhdHRlcm5zCgkqIHBhdHRlcm4uYyB4bWxsaW50LmM6IGEgZmV3IGZpeGVzCgpTdW4gSmFuIDMwIDE5OjI3OjIzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYyBpbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmggeG1sbGludC5jOiBhZGRlZCBhIAoJICBzdHJlYW1pbmcgcGF0dGVybiBkZXRlY3RvciBmb3IgYSBzdWJzZXQgb2YgWFBhdGgsIHNob3VsZAoJICBoZWxwIEthc2ltaWVyIGZvciBpZGVudGl0eSBjb25zdHJhaW50cwoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBhcHBsaWVkIFN0ZXBoYW5lIEJpZG91bCBwYXRjaCB0byBmaW5kCgkgIHBhdGhzIHdpdGhvdXQgYnJlYWtpbmcuCgpGcmkgSmFuIDI4IDE4OjUzOjQwIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgYW4gdW50ZXN0ZWQgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgYSAmIHZzICYmCgpGcmkgSmFuIDI4IDE4OjM3OjE4IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBpbXBsZW1lbnRhdGlvbiBvZiB4bWxUZXh0UmVhZGVyUmVhZFN0cmluZyBieQoJICBCam9ybiBSZWVzZQoKRnJpIEphbiAyOCAxNjo1MTo0NyBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IENvcnJlY3RlZCBhbiBhbWJpZ2lvdXMgc3ltYm9sLXNwYWNlIGZvcgoJICBsb2NhbCBhdHRyaWJ1dGUgZGVjbGFyYXRpb25zLiBJRkRFRmVkIG1vcmUgSURDIGNvZGUgdG8KCSAgc3VycHJlc3MgY29tcGlsZXIgd2FybmluZ3MuCgpGcmkgSmFuIDI4IDAwOjU3OjA0IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGJha2VmaWxlL1JlYWRtZS50eHQgYmFrZWZpbGUvQmFrZWZpbGVzLmJrZ2VuIGJha2VmaWxlL2xpYnhtbDIuYmtsOgoJICBmaWxlcyBmb3IgdGhlIEJha2VmaWxlIGdlbmVyYXRvciBmb3IgTWFrZWZpbGVzIGZyb20gRnJhbmNlc2NvCgkgIE1vbnRvcnNpCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogZml4ZXMgZm9yIFdpbmRvd3MgY29tcGlsYXRpb24gd2l0aCBub24tZGVmYXVsdAoJICBmbGFncyBieSBKb2VsIFJlZWQKClRodSBKYW4gMjcgMTg6MjM6NTAgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxDb3B5RG9jIHRvIGFsc28gY29weSB0aGUgZG9jLT5VUkwgYXMgcG9pbnRlZAoJICBieSBNYXJ0aWpuIEZhYXNzZW4KClRodSBKYW4gMjcgMTM6Mzk6MDQgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaDoKCSAgQWRkZWQgYW4gaW5pdGlhbCBza2VsZXRvbiBmb3IgaW5kZW50aXR5LWNvbnN0cmFpbnRzLiBUaGlzIGlzIGFsbAoJICBkZWZpbmVkIG91dCwgc2luY2Ugbm90IGNvbXBsZXRlLCBwbHVzIGl0IG5lZWRzIHN1cHBvcnQgZnJvbSBvdGhlcgoJICBtb2R1bGVzLgoJICBBZGRlZCBtYWNoYW5pc20gdG8gc3RvcmUgZWxlbWVudCBpbmZvcm1hdGlvbiBmb3IgdGhlCgkgIGFuY2VzdG9yLW9yLXNlbGYgYXhpczsgdGhpcyBpcyBuZWVkZWQgZm9yIGlkZW50aXR5LWNvbnN0cmFpbnRzCgkgIGFuZCBzaG91bGQgYmUgaGVscGZ1bGwgZm9yIGEgZnV0dXJlIHN0cmVhbWFibGUgdmFsaWRhdGlvbi4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogQWRkZWQgYW4gZXJyb3IgY29kZSBmb3IKCSAgaWRlbnRpdHktY29uc3RyYWludHMuCgpXZWQgSmFuIDI2IDAxOjAzOjM3IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBoYWQgdG8gZml4IGdlbmVyYXRpb24gYW5kIHJlYnVpbGQuCgkqIHZhbGlkLmM6IHRoZSB0ZXN0YXBpIGZvdW5kIGEgYnVnIGluIHRoZSBsYXN0IGNvZGUgb2YgY291cnNlICEKCldlZCBKYW4gMjYgMDA6NDM6MDUgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gdGVzdGFwaS5jIGRvYy9NYWtlZmlsZS5hbTogZml4aW5nIHRoZSB3YXkgdGVzdGFwaS5jCgkgIGlzIGdlbmVyYXRlZCwgZml4ZXMgYnVnICMxNjEzODYKCSogZGljdC5jOiBmaXggYSBjb21tZW50IHR5cG8KCSogZWxmZ2NjaGFjay5oIGRvYy8qOiByZWdlbmVyYXRlZAoKVHVlIEphbiAyNSAyMjozOTozMyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZm91bmQgYW5kIGZpeGVkIDIgcHJvYmxlbXMgaW4gdGhlIGludGVybmFsIHN1YnNldCBzY2FubmluZwoJICBjb2RlIGFmZmVjdGluZyB0aGUgcHVzaCBwYXJzZXIgKGFuZCB0aGUgcmVhZGVyKSwgZml4ZXMgIzE2NTEyNgoJKiB0ZXN0L2ludHN1YnNldDIueG1sIHJlc3VsdC8vaW50c3Vic2V0Mi54bWwqOiBhZGRlZCB0aGUgdGVzdCBjYXNlCgkgIHRvIHRoZSByZWdyZXNzaW9uIHRlc3RzLgoKVHVlIEphbiAyNSAwMToyMDoxMSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0ZHNvLmMgeG1scmVnZXhwLmM6IHdhcm5pbmcgcGF0Y2hlcyBmcm9tIFBldGVyIEJyZWl0ZW5sb2huZXIKCSogaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCB2YWxpZC5jIHBhcnNlci5jOiBzZXJpb3VzIERURCBwYXJzaW5nCgkgIHNwZWVkdXBzLCBzdGFydCB0byBkZXByZWNhdGUgMyBFbGVtZW50RGVmIHJlbGF0ZWQgZW50cnkgcG9pbnQKCSAgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGJldHRlciBvbmVzLgoKTW9uIEphbiAyNCAwMDo0Nzo0MSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IG1vcmUgaGFzaCBkaWN0aW9uYXJ5IGludGVybmluZyBjaGFuZ2VzCgpTdW4gSmFuIDIzIDIzOjU0OjM5IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGhhc2guYyBpbmNsdWRlL2xpYnhtbC9oYXNoLmg6IGFkZGVkIHhtbEhhc2hDcmVhdGVEaWN0IHdoZXJlCgkgIHRoZSBoYXNoIHJldXNlcyB0aGUgZGljdGlvbm5hcnkgZm9yIGludGVybmFsIHN0cmluZ3MKCSogZW50aXRpZXMuYyB2YWxpZC5jIHBhcnNlci5jOiByZXVzZSB0aGF0IG5ldyBBUEksIGxlYWRzIHRvIGEgZGVjZW50CgkgIHNwZWVkdXAgd2hlbiBwYXJzaW5nIGZvciBleGFtcGxlIERvY0Jvb2sgZG9jdW1lbnRzLgoKU3VuIEphbiAyMyAyMToxNDoyMCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogc21hbGwgc3BlZWR1cCBpbiBza2lwcGluZyBibGFua3MgY2hhcmFjdGVycwoJKiBlbnRpdGllcy5jOiBpbnRlcm5pbmcgdGhlIGVudGl0aWVzIHN0cmluZ3MgCgpTdW4gSmFuIDIzIDE4OjM1OjAwIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBib29zdGluZyBjb21tb24gY29tbW5lbnQgcGFyc2luZyBjb2RlLCBpdCB3YXMgcmVhbGx5CgkgIHNsb3cuCgkqIHRlc3QvY29tbWVudFszLTVdLnhtbCByZXN1bHQvL2NvbW1lbnRbMy01XS54bWwqOiBhZGRlZCBzcHJlY2lmaWMKCSAgcmVncmVzc2lvbiB0ZXN0cwoKU3VuIEphbiAyMyAwMTowMDowOSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogc21hbGwgb3B0aW1pemF0aW9uIGJhY2suCgpTYXQgSmFuIDIyIDAwOjQwOjMxIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYyBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9kaWN0Lmg6IGEgc2luZ2xlIGxvY2sgdmVyc2lvbgoJICBtb3N0bHkgYXZvaWQgdGhlIGNvc3QgcGVuYWx0eSBvZiB0aGUgbG9jayBpbiBjYXNlIG9mIGxvdyAKCSAgcGFyYWxsZWxpc20sIHNvIGFwcGx5aW5nIHRoYXQgdmVyc2lvbiBpbnN0ZWFkLgoKRnJpIEphbiAyMSAxNzo1NDowNiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmM6IHBhdGNoIGZyb20gR2FyeSBDb2FkeSB0byBmaXggYSByYWNlIGluIGRpY3QgcmVmZXJlbmNlCgkgIGNvdW50aW5nIGluIG11bHRpdGhyZWFkZWQgYXBwcy4KCkZyaSBKYW4gMjEgMTY6MDg6MjEgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGJ1ZyAjMTY0NTU2IHdoZXJlIG5vbi1mYXRhbCBlcnJvcnMgc3RvcHBlZAoJICBwdXNoIHBhcnNpbmcgYW5kIHhtbHJlYWRlci4KCSogTWFrZWZpbGUuYW06IGZpeHVwCgkqIHRlc3QvZXJyb3JzL3dlYmRhdi54bWwgcmVzdWx0L2Vycm9ycy93ZWJkYXYqOiBhZGRpbmcgcmVncmVzc2lvbgoJICB0ZXN0IGZvciB0aGlzIHByb2JsZW0uCgpXZWQgSmFuIDE5IDE3OjI0OjM0IENFVCAyMDA1IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogQ29ycmVjdGVkIHRhcmdldE5hbWVzcGFjZSBpbgoJICB4bWxTY2hlbWFFbGVtZW50RHVtcC4gQ29zbWV0aWMgY2hhbmdlcyB0byB0aGUgZHVtcCBvdXRwdXQuCQoKU3VuIEphbiAxNiAyMTowMDo1MyBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUyBkb2MvKjogcHJlcGFyaW5nIHJlbGVhc2Ugb2YgMi42LjE3LAoJICB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpTdW4gSmFuIDE2IDE5OjU4OjM2IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBiZXR0ZXIgZml4IGZvciAjMTUxNjk0IG5vdCBraWxsaW5nIGMxNG4gcmVncmVzc2lvbiB0ZXN0cwoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4aW5nIGJ1ZyAjMTU3NjUzCgpTdW4gSmFuIDE2IDE5OjAxOjA2IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnICMxNTE2OTQsIGxpbmUgc2hvdWxkIGFsd2F5cyBiZSBzZXQgaW4gdGhlCgkgIGVsZW1lbnRzLgoKU3VuIEphbiAxNiAwMTowNDoxOCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogdHJ5aW5nIHRvIGZpeCBhdCBsZWFzdCB0aGUgbWVzc2FnZSBmcm9tCgkgIGJ1ZyAjMTU4NjI4CgkqIGluY2x1ZGUvbGlieG1sL3htbHNhdmUuaCB4bWxzYXZlLmM6IGFkZGVkIGZpcnN0IHhtbHNhdmUgb3B0aW9uCgkgIGZvciBmb3JtYXQsIGMuZi4gYnVnICMxNTk5OTcKClNhdCBKYW4gMTUgMTg6NDQ6MzAgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5weTogbWFrZSBfX3N0cl9fIGNhbGwgc2VyaWFsaXplKCkgb24gbm9kZXMsIGMuZi4gCgkgIGJ1ZyAjMTU3ODcyCgpTYXQgSmFuIDE1IDE4OjE4OjA3IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYzogYXBwbGllZCBwYXRjaCBmcm9tIERhbiBNY05pY2hvbCBmb3IgY29tcGlsYXRpb24gb24gQUlYCgpTYXQgSmFuIDE1IDEzOjM1OjE5IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgYnVnICMxNTc2MzMgaW4gcmVsYXhuZyBjaG9pY2Ugb3B0aW1pemF0aW9uCgkqIHJlc3VsdC9yZWxheG5nL2Nob2ljZTAqIHRlc3QvcmVsYXhuZy9jaG9pY2UwKjogYWRkZWQgcmVncmVzc2lvbgoJICB0ZXN0cyBhYm91dCBpdC4KCSogZG9jLyo6IHJlYnVpbHQKCSogdGVzdGRzby5jOiByZW1vdmVkIGEgd2FybmluZyBkdWUgdG8gYSBtaXNzaW5nIHZvaWQgaW4gc2lnbmF0dXJlLgoKVGh1IEphbiAxMyAxNzo0Mjo1NSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggeG1sc2NoZW1hcy5jOiAKCSAgRXhwb3NlZCB0YXJnZXROYW1lc3BhY2UgZm9yIHNpbXBsZS9jb21wbGV4IHR5cGVzLCBtb2RlbCBncm91cHMsCgkgIGF0dHJpYnV0ZSBncm91cHMgYW5kIG5vdGF0aW9ucyAocmVwb3J0ZWQgYnkgTWljaGFlbCBIZXdhcnRoIAoJICB0byB0aGUgbWFpbGluZyBsaXN0KS4gQWRkZWQgdGFyZ2V0TmFtZXNwYWNlIHRvIHhtbFNjaGVtYVR5cGUsIAoJICB4bWxTY2hlbWFBdHRyaWJ1dGVHcm91cCBhbmQgeG1sU2NoZW1hTm90YXRpb24uCgkgIFRpbnkgY29zbWV0aWMgY2hhbmdlIHRvIHRoZSBjb250ZW50IG1vZGVsIGVycm9yIHJlcG9ydCBvdXRwdXQuCgkqIHJlc3VsdC8vYWxsXyouZXJyIHJlc3VsdC8vYW55M18wXzAuZXJyIHJlc3VsdC8vY2hvaWNlXyouZXJyIAoJICByZXN1bHQvL2xpc3QwXzBfMS5lcnIgcmVzdWx0Ly9saXN0MF8xXzEuZXJyOiBBZGFwdGVkIG91dHB1dCAKCSAgb2YgcmVncmVzc2lvbiB0ZXN0cy4KClRodSBKYW4gMTMgMTM6MjA6NTEgQ0VUIDIwMDUgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBQdXQgdGhlIGZpeCBvZiBEYW5pZWwgKGZyb20gVHVlIEphbiAxMSAxNDo0MTo0NyBDRVQpCgkgIGJhY2sgaW4sIHNpbmNlIEkgbWlzc2VkIHRvIHVwZGF0ZSB4bWxzY2hlbWFzLmMgYmVmb3JlIGRvaW5nCgkgIHRoZSBwcmV2aW91cyBjb21taXQuCgkKVGh1IEphbiAxMyAxMjo1OToyNSBDRVQgMjAwNSBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IEludGVncmF0ZWQgeG1sUmVnRXhlY0VyckluZm8gYW5kIHhtbFJlZ0V4ZWNOZXh0VmFsdWVzCgkgIGZyb20geG1scmVnZXhwLmMgdG8gcmVwb3J0IGV4cGVjdGVkIGVsZW1lbnRzIG9uIGNvbnRlbnQgbW9kZWwgZXJyb3JzLgoJKiBhbGxfKi5lcnIgYW55M18wXzAuZXJyIGNob2ljZV8qLmVyciBsaXN0MF8wXzEuZXJyIGxpc3QwXzFfMS5lcnI6CgkgIEFkYXB0ZWQgb3V0cHV0IG9mIHJlZ3Jlc3Npb24gdGVzdHMuCgpUaHUgSmFuIDEzIDEyOjI0OjA5IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiB4bWxtb2R1bGUuYzogdHJ5aW5nIHRvIHdvcmsgYXJvdW5kCgkgIHRoZSBjb21waWxhdGlvbiBwcm9ibGVtIG9uIEhQLVVYCgpXZWQgSmFuIDEyIDIyOjAzOjMzIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhdHRlcm4uYzogZml4ZWQgdGhlIGZpeGVkIHNpemUgYXJyYXkgc3RydWN0dXJlIHByb2JsZW0gcmVwb3J0ZWQgYnkKCSAgUGF0cmljayBTdHJldWxlCgpXZWQgSmFuIDEyIDE1OjE1OjAyIENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVsZmdjY2hhY2suaCB0ZXN0YXBpLmMgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvKjogcmVnZW5lcmF0ZWQKCSAgdGhlIEFQSSBkZXNjcmlwdGlvbiwgcmVidWlsdCwgaW1wcm92ZWQgbmF2aWdhdGlvbiBpbiBkb2N1bWVudGF0aW9uCgkgIGEgYml0LgoKV2VkIEphbiAxMiAxNDoxNzoxNCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaCB4bWxyZWdleHAuYzogZXh0ZW5kZWQgeG1sUmVnRXhlY0VyckluZm8oKQoJICBhbmQgeG1sUmVnRXhlY05leHRWYWx1ZXMoKSB0byByZXR1cm4gZXJyb3IgdHJhbnNpdGlvbiBzdHJpbmdzIHRvbywKCSAgYW5kIHNpbmsgc3RhdGUgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZy4KClR1ZSBKYW4gMTEgMTQ6NDE6NDcgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBmaXhlZCBidWcgIzE2MzY0MSB3aGVuIHRoZSB2YWx1ZSBwYXNzZWQgZm9yCgkgIGFuIGF0b21pYyBsaXN0IHR5cGUgaXMgTlVMTC4KClR1ZSBKYW4gMTEgMTA6MTQ6MzMgSEtUIDIwMDUgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IGZpeGVkIGRlcGVuZGVuY3kgb24gcHl0aG9uIDIuMywKCSAgYWxzbyBzbWFsbCBpbXByb3ZlbWVudCBmb3IgY3lnd2luIChidWcgMTYzMjczKQoKU3VuIEphbiAgOSAxODo0NjozMiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogV2lsbGlhbSBub3RpY2VkIEkgZm9yZ290IHRvIGFkZCBzcGVjaWFsCgkgIHN1cHBvcnQgZm9yIHhtbG1vZHVsZXMuYyBkZWZpbmUKCSogeG1scmVnZXhwLmMgaW5jbHVkZS9saWJ4bWwveG1scmVnZXhwLmg6IGFkZGVkIHRlcm1pbmFsIHRvCgkgIHhtbFJlZ0V4ZWNFcnJJbmZvKCkgQVBJLCBhZGRpbmcgbmV3IHhtbFJlZ0V4ZWNOZXh0VmFsdWVzKCkKCSAgZW50cnkgcG9pbnQgYW5kIHJlZmFjdG9yZWQgdG8gdXNlIGJvdGggY29kZS4KCk1vbiBKYW4gMTAgMDE6MDI6NDEgSEtUIDIwMDYgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MveG1sLmh0bWwsIGRvYy9GQVEuaHRtbDogYWRkZWQgYW4gRkFRIHVuZGVyIERldmVsb3BlciBmb3IKCSAgc2V0dGluZyB1cCBhICJwcml2YXRlIiBsaWJyYXJ5IChhZnRlciBzb21lIGxpc3QgcG9zdHMgYWJvdXQKCSAgcGVvcGxlIGhhdmluZyB0cm91YmxlIGRvaW5nIGl0KQoKU2F0IEphbiAgOCAyMzowNDoxMCBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZml4aW5nIGJlaGF2aW91ciBmb3IgeG1sUmVnRXhlY0VyckluZm8gaW4gY2FzZSBvZgoJICByb2xsYmFjawoKRnJpIEphbiAgNyAxNDo1NDo1MSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBUT0RPOiBzbWFsbCB1cGRhdGUKCSogeG1scmVnZXhwLmM6IHRyeWluZyB0byBhZGQgYW4gQVBJIHRvIGdldCB1c2VmdWwgZXJyb3IgaW5mb3JtYXRpb25zCgkgIGJhY2sgZnJvbSBhIGZhaWxpbmcgcmVnZXhwIGNvbnRleHQuCgpUaHUgSmFuICA2IDE3OjM1OjQxIEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgcHJvYmxlbSB3aXRoIHhtbFhQYXRoRXJyIHdoZW4gZXJyb3IgbnVtYmVyCgkgIHN1YnNjcmlwdCB3YXMgb3V0IG9mIHJhbmdlIChidWcgMTYzMDU1KQoKVGh1IEphbiAgNiAwOTo1NzowMyBIS1QgMjAwNSBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHVyaS5jOiBmaXhlZCBwcm9ibGVtIHdpdGggeG1sVVJJRXNjYXBlIHdoZW4gcXVlcnkgcGFydCB3YXMKCSAgZW1wdHkgKGFjdHVhbGx5IGZpeGVkIHhtbFVSSUVzY2FwZVN0ciB0byByZXR1cm4gYW4gZW1wdHkKCSAgc3RyaW5nIHJhdGhlciB0aGFuIE5VTEwgZm9yIGVtcHR5IHN0cmluZyBpbnB1dCkgKGJ1ZyAxNjMwNzkpCgkgIApUdWUgSmFuICA0IDE3OjA4OjQ1IFBTVCAyMDA1IEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBwYXJzZXIuYywgcGFyc2VySW50ZXJuYWwuYzogZml4ZWQgImNvbCIgY2FsY3VsYXRpb24gZm9yIAogICAgICAgICAgc3RydWN0IF94bWxQYXJzZXJJbnB1dCAoYmFzZWQgb24gcGF0Y2ggZnJvbSBSb2IgUmljaGFyZHMpIAoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oLCBlcnJvci5jOiBwcm9wYWdhdGVkIGVycm9yIGNvbHVtbgogICAgICAgICAgbnVtYmVyIGluIHRoZSB4bWxFcnJvciBzdHJ1Y3R1cmUKClR1ZSBKYW4gIDQgMjI6NDc6MjIgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIG5hbWVzcGFjZSBidWcgaW4gcHVzaCBtb2RlIHJlcG9ydGVkIGJ5IAoJICBSb2IgUmljaGFyZHMKCSogdGVzdC9uczYgcmVzdWx0Ly9uczYqOiBhZGRlZCBpdCB0byB0aGUgcmVncmVzc2lvbiB0ZXN0cwoJKiB4bWxtb2R1bGUuYyB0ZXN0TW9kdWxlLmMgaW5jbHVkZS9saWJ4bWwveG1sbW9kdWxlLmg6CgkgIGFkZGVkIGFuIGV4dHJhIG9wdGlvbiBhcmd1bWVudCB0byBtb2R1bGUgb3BlbmluZyBhbmQgZGVmaW5lZAoJICBhIGNvdXBsZSBvZiBmbGFncyB0byB0aGUgQVBJLgoKVHVlIEphbiAgNCAyMToxNjowNSBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtb2R1bGUuYyBpbmNsdWRlL2xpYnhtbC94bWxtb2R1bGUuaDogYXBwbGllZCBwYXRjaCBmcm9tCgkgIEJqb3JuIFJlZXNlLCBwbHVzIHNvbWUgY2xlYW51cHMKCSogZWxmZ2NjaGFjay5oIGRvYy9lbGZnY2NoYWNrLnhzbDogZml4ZWQgdGhlIHN0eWxlc2hlZXQgdG8gCgkgIGFkZCB0aGUgbmV3IGhlYWRlcgoJKiBkb2MvKiB0ZXN0YXBpLmM6IHJlZ2VuZXJhdGVkIHRoZSBBUEkKClR1ZSBKYW4gIDQgMTg6NDc6MTkgQ0VUIDIwMDUgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBtYWtpbmcgRFNPIHN1cHBvcnQgYW4gb3B0aW9uCgkqIHhtbG1vZHVsZS5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbG1vZHVsZS5oOiBjb2RlCgkgIGFuZCBkb2N1bWVudGF0aW9uIGNsZWFudXBzCgkqIGVsZmdjY2hhY2suaCB0ZXN0YXBpLmMgZG9jLyo6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzIGFuZAoJICBjaGVja3MgZm9yIG5ldyBtb2R1bGUKCSogdGVzdC92YWxpZC9SRUMteG1sLTE5OTgwMjEwLnhtbDogZml4IGEgc21hbGwgY2hhbmdlIGludHJvZHVjZWQKCSAgcHJldmlvdXNseQoKVHVlIEphbiAgNCAxNjowNzo1MiBDRVQgMjAwNSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gZXJyb3IuYyBsaWJ4bWwtMi4wLnBjLmluCgkgIHRlc3RNb2R1bGUuYyB0ZXN0ZHNvLmMgeG1sMi1jb25maWcuaW4geG1sbGludC5jIHhtbG1vZHVsZS5jCgkgIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sbW9kdWxlLmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluIAoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogYXBwbGllZCBEU08gc3VwcG9ydAoJICBwYXRjaCAyIGZyb20gSm9lbCBSZWVkCgpUdWUgSmFuICA0IDE1OjMwOjE1IENFVCAyMDA1IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogYXBwbGllZCBwYXRjaCBmcm9tIE1hcmNpbiBLb25pY2tpIGZvciBCZU9TCgpNb24gSmFuICAzIDEzOjU3OjIxIFBTVCAyMDA1IEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBwYXJzZXIuYzogYWRkZWQgR2V0TGluZU51bWJlciBhbmQgR2V0Q29sdW1uTnVtYmVyIGZ1bmN0aW9ucyBmb3IgeG1sUmVhZGVyCgpTdW4gSmFuICAyIDE3OjUxOjE4IEhLVCAyMDA1IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCVJlLWV4YW1pbmVkIHRoZSBwcm9ibGVtcyBvZiBjb25maWd1cmluZyBhICJtaW5pbWFsIiBsaWJyYXJ5LgoJU3luY2hyb25pemVkIHRoZSBoZWFkZXIgZmlsZXMgd2l0aCB0aGUgbGlicmFyeSBjb2RlIGluIG9yZGVyCgl0byBhc3N1cmUgdGhhdCBhbGwgdGhlIHZhcmlvdXMgY29uZGl0aW9uYWxzIChMSUJYTUxfeHh4eF9FTkFCTEVEKQoJd2VyZSB0aGUgc2FtZSBpbiBib3RoLiAgTW9kaWZpZWQgdGhlIEFQSSBkYXRhYmFzZSBjb250ZW50IHRvIG1vcmUKCWFjY3VyYXRlbHkgcmVmbGVjdCB0aGUgY29uZGl0aW9uYWxzLiAgRW5oYW5jZWQgdGhlIGdlbmVyYXRpb24KCW9mIHRoYXQgZGF0YWJhc2UuICBBbHRob3VnaCB0aGVyZSB3YXMgbm8gc3Vic3RhbnRpYWwgY2hhbmdlIHRvCglhbnkgb2YgdGhlIGxpYnJhcnkgY29kZSdzIGxvZ2ljLCBhIGxhcmdlIG51bWJlciBvZiBmaWxlcyB3ZXJlCgltb2RpZmllZCB0byBhY2hpZXZlIHRoZSBhYm92ZSwgYW5kIHRoZSBjb25maWd1cmF0aW9uIHNjcmlwdAoJd2FzIGVuaGFuY2VkIHRvIGRvIHNvbWUgYXV0b21hdGljIGVuYWJsaW5nIG9mIGZlYXR1cmVzIChlLmcuCgktLXdpdGgteGluY2x1ZGUgZm9yY2VzIC0td2l0aC14cGF0aCkuICBBZGRpdGlvbmFsbHksIGFsbCB0aGUgZm9ybWF0CgllcnJvcnMgZGlzY292ZXJlZCBieSBhcGlidWlsZC5weSB3ZXJlIGNvcnJlY3RlZC4KCSogY29uZmlndXJlLmluOiBlbmhhbmNlZCBjcm9zcy1jaGVja2luZyBvZiBvcHRpb25zCgkqIGRvYy9hcGlidWlsZC5weSwgZG9jL2VsZmdjY2hhY2sueHNsLCBkb2MvbGlieG1sMi1yZWZzLnhtbCwKCSAgZG9jL2xpYnhtbDItYXBpLnhtbCwgZ2VudGVzdC5weTogY2hhbmdlZCB0aGUgdXNhZ2Ugb2YgdGhlCgkgIDxjb25kPiBlbGVtZW50IGluIG1vZHVsZSBkZXNjcmlwdGlvbnMKCSogZWxmZ2NjaGFjay5oLCB0ZXN0YXBpLmM6IHJlZ2VuZXJhdGVkIHdpdGggcHJvcGVyIGNvbmRpdGlvbmFscwoJKiBIVE1McGFyc2VyLmMsIFNBWC5jLCBnbG9iYWxzLmMsIHRyZWUuYywgeG1sc2NoZW1hcy5jLCB4cGF0aC5jLAoJICB0ZXN0U0FYLmM6IGNsZWFuZWQgdXAgY29uZGl0aW9uYWxzCgkqIGluY2x1ZGUvbGlieG1sL1tTQVguaCwgU0FYMi5oLCBkZWJ1Z1hNTC5oLCBlbmNvZGluZy5oLCBlbnRpdGllcy5oLAoJICBoYXNoLmgsIHBhcnNlci5oLCBwYXJzZXJJbnRlcm5hbHMuaCwgc2NoZW1hc0ludGVybmFscy5oLCB0cmVlLmgsCgkgIHZhbGlkLmgsIHhsaW5rLmgsIHhtbElPLmgsIHhtbGF1dG9tYXRhLmgsIHhtbHJlYWRlci5oLCB4cGF0aC5oXToKCSAgc3luY2hyb25pemVkIHRoZSBjb25kaXRpb25hbHMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgY29kZQoJKiBkb2MvZXhhbXBsZXMvdHJlZTIuYywgZG9jL2V4YW1wbGVzL3hwYXRoMS5jLCBkb2MvZXhhbXBsZXMveHBhdGgyLmM6CgkgIGFkZGVkIGFkZGl0aW9uYWwgY29uZGl0aW9ucyByZXF1aXJlZCBmb3IgY29tcGlsYXRpb24KCSogZG9jLyouaHRtbCwgZG9jL2h0bWwvKi5odG1sOiByZWJ1aWx0IHRoZSBkb2NzCgkKU2F0IERlYyAyNSAxODoxMDowMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCB0byBza2lwIChpZiBuZWNlc3NhcnkpIHRoZSBCT00gZm9yCgkgIGVuY29kaW5nICd1dGYtMTYnLiAgQ29tcGxldGVzIHRoZSBmaXggZm9yIGJ1ZyAjMTUyMjg2LgoJKiB0cmVlLmMsIHBhcnNlci5jOiBtaW5vciB3YXJuaW5nIGNsZWFudXAsIG5vIGNoYW5nZSB0byBsb2dpYwoJCkZyaSBEZWMgMjQgMTY6MzE6MjIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBhZGRlZCBtb3N0IHJlcXVpcmVkIGVudGlyZXMgdG8KCSAgZm9yZWlnbiBlbmNvZGluZyB0YWJsZSwgcGx1cyBzb21lIGFkZGl0aW9uYWwgbG9naWMgdG8KCSAgYXNzdXJlIG9ubHkgdGhlIDFzdCBwYXJhbSB1c2VzIHRoZSAndCMnIGZvcm1hdC4gIEZpeGVzCgkgIGJ1ZyAjMTUyMjg2LCBidXQgbWF5IHN0aWxsIGhhdmUgc29tZSBvdGhlciBVVEYtMTYgcHJvYmxlbXMuCgpUaHUgRGVjIDIzIDIzOjQ0OjA4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogTWFrZWZpbGUuYW0sIGdlbnRlc3QucHk6IGVuaGFuY2VkIGZvciBlbmFibGluZyBidWlsZCBpbgoJICBhIGRpZmZlcmVudCBkaXJlY3RvcnkuICBBZGRlZCAob3B0aW9uYWwpIHBhcmFtIHRvIGdlbnRlc3QucHkKCSAgdG8gc3BlY2lmeSB0aGUgc291cmNlIGRpcmVjdG9yeSAoYnVnICMxNTU0NjgpCgkqIGRvYy9NYWtlZmlsZS5hbTogY2hhbmdlZCBkZXN0aW5hdGlvbiBvZiBORVdTIGZyb20gKHRvcF9zcmNkaXIpCgkgIHRvICh0b3BfYnVpbGRkaXIpIChidWcgIzE1NTQ2OCkKCSogcHl0aG9uL01ha2VmaWxlLmFtLCBweXRob24vZ2VuZXJhdG9yLnB5OiBlbmhhbmNlZCBmb3IgZW5hYmxpbmcKCSAgYnVpbGQgaW4gYSBkaWZmZXJlbnQgZGlyZWN0b3J5KGJ1ZyAjMTU1NDY4KS4gIEFkZGVkIChvcHRpb25hbCkKCSAgcGFyYW0gdG8gZ2VuZXJhdG9yLnB5IHRvIHNwZWNpZnkgdGhlIHNvdXJjZSBkaXJlY3RvcnkuICBBZGRlZAoJICBhIG5ldyB0YWJsZSBvZiBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBwb3NzaWJsZSAiZm9yZWlnbiIgZW5jb2RpbmdzCgkgIChlLmcuIFVURjE2KSwgYW5kIGNvZGUgdG8gdXNlIHB5dGhvbiAndCcgZm9ybWF0IGluc3RlYWQgb2YKCSAgJ3onIGZvcm1hdCAobW9zdGx5IHNvbHZpbmcgYnVnICMxNTIyODYsIGJ1dCBzdGlsbCBuZWVkIHRvCgkgIHBvcHVsYXRlIHRoZSB0YWJsZSkuCgkgIApUdWUgRGVjIDIxIDA4OjEwOjQ0IE1TVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2Mvc2l0ZS54c2wsIGRvYy94bWwuaHRtbCwgcGx1cyByZWJ1aWx0IGFsbCB0aGUgaHRtbCBwYWdlcwoJQ2hhbmdlIHJlZmVyZW5jZSB0byBuZXcgc2l0ZSBmb3IgU29sYXJpcyBiaW5hcmllcywgZml4aW5nIGJ1ZwoJMTYwNTk4CgoKTW9uIERlYyAyMCAwODowMjo1NyBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiByZXNldCBpbnB1dC0+YmFzZSB3aXRoaW4geG1sU3RvcFBhcnNlcgoJKiB4bWxzdHJpbmcuYzogcmVtb3ZlZCBjYWxsIHRvIHhtbFVURjhTdHJsZW4gZnJvbSB3aXRoaW4KCSAgeG1sVVRGOFN0cnBvcyAoQmlsbCBNb3NlbGV5IHBvaW50ZWQgb3V0IGl0IHdhcyBub3QKCSAgdXNlZnVsKQoKRnJpIERlYyAxNyAxNjowMzo0MSBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IGNoYW5nZWQgeG1sRXJyVmFsaWRXYXJuaW5nIHRvIHVzZSBjdHh0LT53YXJuaW5nCgkgIGluc3RlYWQgb2YgY3R4dC0+ZXJyb3IgZm9yIGl0cyByZXBvcnRzIChidWcgIzE2MDY2MikKCkZyaSBEZWMgMTcgMTQ6NTI6MTcgUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBtb2RpZmllZCB0byBhbGxvdyB0aGUgbnMgYW5kIG5zRGVmcwoJICBhY2Nlc3NvcnMgdG8gcmV0dXJuIE5vbmUgaW5zdGVhZCBvZiBlcnJvciB3aGVuIG5vIG5hbWVzcGFjZQoJICBpcyBwcmVzZW50IChidWcgIykKCkZyaSBEZWMgMTcgMTE6NDA6MjEgUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvTWFrZWZpbGUuYW06IGNoYW5nZWQgbWFpbnRhaW5lci1jbGVhbiBkZXBlbmRlbmN5IHdpdGgKCSAgc3VnZ2VzdGlvbiBmcm9tIENyaXNwaW4gRmxvd2VyZGF5IChidWcgIzE1NzYzNCkKCSogZGVidWdYTUwuYzogZml4ZWQgY3Jhc2ggd2hlbiBBVFRSSUJVVEUgb3IgRE9DVU1FTlQgbm9kZXMKCSAgd2VyZSBzcGVjaWZpZWQgd2l0aCBkZWJ1Z0R1bXBOb2RlIChidWcgIzE2MDYyMSkKCkZyaSBEZWMgMTAgMTE6MjQ6NDEgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgSUQgZGVhbGxvY2F0aW9uIHByb2JsZW0gYmFzZWQgb24gcGF0Y2ggZnJvbQoJICBTdGV2ZSBTaGVwYXJkIGZpeGVzIGJ1ZyAjMTYwODkzCgkqIHhtbG1lbW9yeS5jOiBpbXByb3ZpbmcgY29tbWVudC4KCSogdGVzdGFwaS5jOiBuZXcgdGVzdCBmb3IgeG1sRGljdEV4aXN0cygpIGlzIGdlbmVyYXRlZC4KCldlZCBEZWMgIDEgMjI6MzU6MzcgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkaWN0LmMsIHhwYXRoLmMsIGluY2x1ZGUvbGlieG1sL2hhc2guaDogZml4ZWQgdXAgc29tZSBnY2Mgd2FybmluZ3MsCgkgIG5vIGNoYW5nZSB0byBsb2dpYy4gIE5ldyBtYWNybyBYTUxfQ0FTVF9GUFRSIHRvIGNpcmN1bXZlbnQgZ2NjCgkgIHdhcm5pbmdzIG9uIGZ1bmN0aW9uIHBvaW50ZXIgPC0+IG9iamVjdCBwb2ludGVyIChhIGhhY2spLgoKTW9uIE5vdiAyOSAxNDowNzoxOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBhIG1lbW9yeSBsZWFrIG9uIGVycm9ycyBpbiBzb21lIGNpcmN1bXN0YW5jZXMgIzE1OTgxMgoKRnJpIE5vdiAyNiAyMzoyMDo0OCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbElPLmM6IGFkZGVkIGEgY2hlY2sgd2l0aGluIHhtbE91dHB1dEJ1ZmZlcldyaXRlRXNjYXBlIHRvIHByZXZlbnQKCSAgYSBkZWFkIGxvb3Agb24gYmFkIGRhdGEgKGJ1ZyAxNTk1NTApCgpGcmkgTm92IDI2IDEzOjA5OjA0IENFVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgc3RyaWN0L2xheCBlbGVtZW50IHdpbGRjYXJkczogdGhlIGNoaWxkcmVuCgkgIG9mIGVsZW1lbnRzIGZvciB3aGljaCBhIGRlY2xhcmF0aW9uIGV4aXN0ZWQgd2VyZSBzdGlsbCBwcm9jZXNzZWQKCSAgYnkgdGhlIHdpbGRjYXJkIG1lY2hhbmlzbSAocmVwb3J0ZWQgYnkgcGhpbGlwcGUgdmVudHJpbGxvbiB0byB0aGUKCSAgbWFpbGluZyBsaXN0KS4KCSAgQ2hhbmdlZCB0aGUgaW1wb3J0IGFuZCBpbmNsdWRlIG1hY2hhbmlzbSB0byBzaGFyZSBkaWN0aW9uYXJpZXMuCgpGcmkgTm92IDI2IDExOjQ0OjM2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYzogbWFrZSBzdXJlIHhtbEN0eHRSZWFkRmlsZSBhbmQgaHRtbEN0eHRSZWFkRmlsZQoJICBnbyB0aHJvdWdoIHRoZSBjYXRhbG9nIHJlc29sdXRpb24uCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBmaXggYSBzaWRlIGVmZmVjdCB3cm5pbmcgb2YgdGhlIGNoYW5nZQoKV2VkIE5vdiAyNCAxMzo0MTo1MiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmMgaW5jbHVkZS9saWJ4bWwvZGljdC5oOiBhZGRlZCB4bWxEaWN0RXhpc3RzKCkgdG8gdGhlIAoJICBkaWN0aW9ubmFyeSBpbnRlcmZhY2UuCgkqIHhtbHJlYWRlci5jOiBhcHBseWluZyB4bWxUZXh0UmVhZGVySGFzQXR0cmlidXRlcyBmaXggZm9yIG5hbWVzcGFjZXMKCSAgZnJvbSBSb2IgUmljaGFyZHMKCldlZCBOb3YgMTcgMTM6NTQ6MzcgQ0VUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiB0aW55IGVuaGFuY2VtZW50IGZvciBjb250ZW50IG1vZGVsIGVycm9yIHJlcG9ydHMKCSAgKCMxNTcxOTAsICMxNDM5NDgpLiBSZW1vdmVkIGFiYnJldmlhdGlvbnM6IENULCBTVCBhbmQgV0MgCgkgICgjMTU3MTkwLCByZXBvcnRlZCBieSBGcmFucyAgRW5nbGljaCkuCgkgIEluaXRpYWw6IG5vIHJlcG9ydCBvZiBsb2NhbCBjb21wb25lbnRzLgoJKiByZXN1bHQvc2NoZW1hcy9hbGwqIHJlc3VsdC9zY2hlbWFzL2FueTNfMF8wLmVycgoJICByZXN1bHQvc2NoZW1hcy9jaG9pY2UqCgkgIHJlc3VsdC9zY2hlbWFzL2Nvcy1zdC1yZXN0cmljdHMtMS0yLWVycl8wXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2Rlcml2YXRpb24tb2stZXh0ZW5zaW9uLWVycl8wXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2Rlcml2YXRpb24tb2stZXh0ZW5zaW9uXzBfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvZGVyaXZhdGlvbi1vay1yZXN0cmljdGlvbi0yLTEtMV8wXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2Rlcml2YXRpb24tb2stcmVzdHJpY3Rpb24tNC0xLWVycl8wXzAuZXJyIAoJICByZXN1bHQvc2NoZW1hcy9kZXRlcjBfMF8wLmVyciByZXN1bHQvc2NoZW1hcy9leHRlbnNpb24xXzBfMi5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvZmFjZXQtdW5pb25TVC1lcnIxXzBfMC5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvaGV4YmluYXJ5XzBfMS5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvbGlzdCogcmVzdWx0L3NjaGVtYXMvcmVzdHJpY3Rpb24tYXR0cjFfMF8wLmVycgoJICByZXN1bHQvc2NoZW1hcy92ZHYtZmlyc3Q0XzBfMS5lcnIgcmVzdWx0L3NjaGVtYXMvdmR2LWZpcnN0NF8wXzIuZXJyOgoJICBBZGFwdGVkIG91dHB1dC4KCk1vbiBOb3YgMTUgMTM6MDQ6MjggQ0VUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBNb3ZlZCBleGVjdXRpb24gb2YgeG1sU2NoZW1hQ2hlY2tEZWZhdWx0cyB0bwoJICB4bWxTY2hlbWFUeXBlRml4dXA7IHRoaXMgZW5zdXJlcyBmYWNldHMgb2YgaW5oZXJpdGVkIHR5cGVzIHRvIGJlCgkgIGNoZWNrZWQgcHJpb3IgdG8gZmFjZXRzIG9mIGRlcml2ZWQgdHlwZXMgLSB3aGljaCBjYXVzZWQgYSBzZWcKCSAgZmF1bHQgb3RoZXJ3aXNlIChidWcgIzE1ODIxNiwgcmVwb3J0ZWQgYnkgRnJhbnMgRW5nbGljaCkuCgpTdW4gTm92IDE0IDIyOjIzOjE4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VudGVzdC5weSwgdGVzdGFwaS5jOiBmdXJ0aGVyIGVuaGFuY2VtZW50LCBub3cgYWxsCgkgIGNvbXBpbGF0aW9uIHdhcm5pbmdzIGhhdmUgYmVlbiBmaXhlZC4KCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFkZGVkIE5VTEwgY2hlY2sgZm9yIG9uZSBmdW5jdGlvbgoKRnJpIE5vdiAxMiAyMzo1ODoxNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IHRyaXZpYWwgY2hhbmdlIChjaGFuZ2VkIENIRUNLX0NPTlRFWFQgdG8gQ0hFQ0tfQ1RYVAoJICBvbiBhIGNvdXBsZSBvZiBsaW5lcykKCSogZ2VudGVzdC5weSwgdGVzdGFwaS5jOiBlbmhhbmNlZCB0byByZWR1Y2UgY29tcGlsYXRpb24gd2FybmluZ3MKCkZyaSBOb3YgMTIgMTY6MTI6NDggQ0VUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBVbi1jb21tZW50ZWQgYSBUT0RPIGluIHhtbFNjaGVtYVBhcnNlRWxlbWVudC4KCkZyaSBOb3YgMTIgMTQ6NTU6MzYgQ0VUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeG1sc2NoZW1hcy5jOiBDb3JyZWN0IHN5bWJvbCBzcGFjZSBmb3IgJ2FsbCcgYW5kICdjaG9pY2UnLgoJKiB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL3htbHNjaGVtYXN0eXBlcy5oOiBBZGRlZCAncmVwbGFjZScgCgkgIG5vcm1hbGl6YXRpb24gZm9yICdub3JtYWxpemVkU3RyaW5nJy4gIAoJICBBZGRlZCB4bWxTY2hlbWFXaGl0ZVNwYWNlUmVwbGFjZSB0byB0aGUgQVBJLgoKVGh1IE5vdiAxMSAyMTo0MzowMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogZm9yZ290IGEgJChzcmNkaXIpCgkqIGVuY29kaW5nLmM6IHN0dXBpZCBlcnJvciB3cm9uZyBuYW1lICMxNTc5NzYKCldlZCBOb3YgMTAgMTU6MzU6MjUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBjb25maWd1cmUuaW4gZG9jLyo6IHByZXBhcmluZyByZWxlYXNlIG9mIGxpYnhtbDItMi42LjE2CgpXZWQgTm92IDEwIDEyOjU1OjE4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0CgkgIHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOiBBcHBsaWVkIHBhdGNoIGZyb20gQnJlbnQKCSAgSGVuZHJpY2tzIGFkZGluZyBzdXBwb3J0IGZvciBsYXRlIERURCB2YWxpZGF0aW9uLgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2R0ZHZhbGlkLnB5CgkgIHB5dGhvbi90ZXN0cy90ZXN0LmR0ZDogaW50ZWdyYXRlZCB0aGUgcHJvdmlkZWQgcmVncmVzc2lvbiB0ZXN0CgpUdWUgbm92ICA5IDE5OjI0OjMxIENFVCAyMDA0IERvZGppIFNla2V0ZWxpIDxkb2RqaUBzZWtldGVsaS5vcmc+CgoJKiBjb25maWd1cmUuaW46IGRldGVjdCB3aGVuIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCgkgIGhhcyB0aGUgX19zc19mYW1pbHkgbWVtYmVyIGluc3RlYWQgb2Ygc3NfZmFtaWx5IGFuZAoJICBiZWhhdmUgYWNjb3JkaW5nbHkuIFdlIG5vdyBjYW4gdXNlIGlwdjYgb24gYWl4LgoKVHVlIE5vdiAgOSAxNzoxNTo0NiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBnZW50ZXN0LnB5IHRlc3RhcGkuYzogaW50ZWdyYXRlZCBpbiAibWFrZSB0ZXN0cyIKCSAgYWRkZWQgLXEgb3B0aW9uLCBhbmQgbW9yZSBjb25kaXRpb25hbCBmZWF0dXJlcyBmaXhlcwoJKiBjYXRhbG9nLmMgZGVidWdYTUwuYyBwYXJzZXIuYyB0ZXN0VGhyZWFkcy5jIHhtbGxpbnQuYwoJICB4bWxzY2hlbWFzdHlwZXMuYyB4bWx3cml0ZXIuY2luY2x1ZGUvbGlieG1sL2NhdGFsb2cuaAoJICBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oOiB2YXJpb3VzIGNvbXBpbGF0aW9uIGFuZCBjb25kaXRpb25hbAoJICBjbGVhbnVwcy4KCSogZG9jLyo6IHJlZ2VuZXJhdGVkCgpUdWUgTm92ICA5IDE1OjU5OjUwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBiZXR0ZXIgaGFuZGxpbmcgb2YgY29uZGl0aW9uYWwgZmVhdHVyZXMKCSogSFRNTHBhcnNlci5jIFNBWDIuYyBwYXJzZXJJbnRlcm5hbHMuYyB4bWx3cml0ZXIuYzogbW9yZSB0ZXN0aW5nCgkgIG9uIHBhcnNlciBjb250ZXh0cyBjbG9zZWQgbGVha3MsIGVycm9yIG1lc3NhZ2VzCgpUdWUgTm92ICA5IDEwOjIxOjM3IEdNVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgcHJvYmxlbSBjb25jZXJuaW5nIFhQYXRoIGNvbnRleHQgY29ycnVwdGlvbgoJICBkdXJpbmcgZnVuY3Rpb24gYXJndW1lbnQgZXZhbHVhdGlvbiAoYnVnIDE1NzY1MikKCSAgCk1vbiBOb3YgIDggMTg6NTQ6NTIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdGFwaS5jOiBtb3JlIHR5cGVzLgoJKiBwYXJzZXJJbnRlcm5hbHMuYyB4cGF0aC5jOiBtb3JlIGZpeGVzCgpNb24gTm92ICA4IDE4OjE2OjQzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBiZXR0ZXIgcGFyc2VyIG9wdGlvbnMgY292ZXJhZ2UKCSogU0FYMi5jIHhwYXRoLmM6IG1vcmUgY2xlYW51cHMuCgpUdWUgTm92ICA5IDAxOjUwOjA4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RhcGkuYzogdHJ5aW5nIHRvIGZpeCBzb21lIG9wdGlvbmFsIHN1cHBvcnQgYnJva2VubmVzcwoKTW9uIE5vdiAgOCAxNzoyNToyNyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBjb3ZlcmFnZQoJKiBkZWJ1Z1hNTC5jIHBhcnNlci5jIHhtbHJlZ2V4cC5jIHhwYXRoLmM6IG1vcmUgZml4ZXMKCk1vbiBOb3YgIDggMTU6MDI6MzkgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgY292ZXJhZ2UKCSogU0FYMi5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBtb3JlIGZpeGVzCgpNb24gTm92ICA4IDEyOjU1OjE2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHRlc3RhcGkuYyB4bWxJTy5jIHhtbHN0cmluZy5jOiBtb3JlIGZpeGVzLgoKTW9uIE5vdiAgOCAxMToyNDo1NyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSB0eXBlcywgbW9yZSBjb3ZlcmFnZQoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyByZWxheG5nLmMgdmFsaWQuYyB4bWxJTy5jCgkgIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIHByb2JsZW1zIGZpeGVkCgkgIApNb24gTm92ICA4IDEwOjI0OjI4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VudGVzdC5weTogZml4ZWQgdGVzdCBmaWxlIGNvcnJ1cHRpb24gcHJvYmxlbQoKU3VuIE5vdiAgNyAxMzoxODowNSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogZml4ZWQgdHlwb3MgYW5kIGF2b2lkIENhdGFsb2dzIHZlcmJvc2l0eQoKU2F0IE5vdiAgNiAyMzoyNToxNiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0YXBpLmM6IGF1Z21lbnRlZCB0aGUgbnVtYmVyIG9mIHR5cGVzCgpTYXQgTm92ICA2IDIwOjI0OjA3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgdHJlZS5jIHhtbHJlYWRlci5jIHhtbHdyaXRlci5jOiBhIG51bWJlciBvZiBuZXcKCSAgYnVnIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCgpTYXQgTm92ICA2IDE1OjUwOjExIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBhdWdtZW50ZWQgdHlwZSBhdXRvZ2VuZXJhdGlvbiBmb3IgZW51bXMKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiByZW1vdmVkIGRpcmVjdCBlcnJvciByZXBvcnRpbmcuCgpTYXQgTm92ICA2IDE0OjI3OjE4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGZpeGVkIGEgcmVncmVzc2lvbiBpbiBpY29udiBzdXBwb3J0LgoKRnJpIE5vdiAgNSAxODoxOToyMyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogYXV0b2dlbmVyYXRlIGEgbWluaW1hbCBOVUxMIHZhbHVlIHNlcXVlbmNlCgkgIGZvciB1bmtub3duIHBvaW50ZXIgdHlwZXMKCSogSFRNTHBhcnNlci5jIFNBWDIuYyBjaHZhbGlkLmMgZW5jb2RpbmcuYyBlbnRpdGllcy5jIHBhcnNlci5jCgkgIHBhcnNlckludGVybmFscy5jIHJlbGF4bmcuYyB2YWxpZC5jIHhtbElPLmMgeG1scmVhZGVyLmMgCgkgIHhtbHNhdmUuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgeG1sc3RyaW5nLmMgeHBhdGguYwoJICB4cG9pbnRlci5jOiBUaGlzIHVuY292ZXJlZCBhbiBpbXByZXNzaXZlIGFtb3VudCBvZiBlbnRyeSBwb2ludHMKCSAgbm90IGNoZWNraW5nIGZvciBOVUxMIHBvaW50ZXJzIHdoZW4gdGhleSBvdWdodCB0bywgY2xvc2luZyBhbGwKCSAgdGhlIG9wZW4gZ2Fwcy4KCkZyaSBOb3YgIDUgMTY6MjY6MjggVVRDIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjYXRhbG9nLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBOVUxMIGVudHJ5IChidWcgMTU3NDA3KQoJKiB4cGF0aC5jOiBmaXhlZCBhIGNvdXBsZSBvZiB3YXJuaW5ncyAobm8gY2hhbmdlIHRvIGxvZ2ljKQoKRnJpIE5vdiAgNSAxNTozMDo0MyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBjb3ZlcmFnZQoJKiB4bWx1bmljb2RlLmM6IG9uZSBmaXgKCkZyaSBOb3YgIDUgMjM6MTU6NTEgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogZml4ZWQgYSBjb21waWxhdGlvbiBwcm9ibGVtIG9uIGEgcmVjZW50IGNoYW5nZQoKRnJpIE5vdiAgNSAxMjo1MDowOSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBjb3ZlcmFnZQoJKiBuYW5vZnRwLmMgdHJlZS5jOiBtb3JlIGZpeGVzCgpGcmkgTm92ICA1IDExOjAyOjI4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBmaXhlZCB0aGUgd2F5IHRoZSBnZW5lcmF0b3Igd29ya3MsCgkgIGV4dGVuZGVkIHRoZSB0ZXN0aW5nLCBlc3BlY2lhbGx5IHdpdGggbW9yZSByZWFsIHRyZWVzIGFuZCBub2Rlcy4KCSogSFRNTHRyZWUuYyB0cmVlLmMgdmFsaWQuYyB4aW5jbHVkZS5jIHhtbElPLmMgeG1sc2F2ZS5jOiBhIGJ1bmNoCgkgIG9mIHJlYWwgcHJvYmxlbXMgZm91bmQgYW5kIGZpeGVkLgoJKiBlbnRpdGllcy5jOiBmaXggZXJyb3IgcmVwb3J0aW5nIHRvIGdvIHRocm91Z2ggdGhlIG5ldyBoYW5kbGVycwoKVGh1IE5vdiAgNCAxODo0NDo1NiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZG9oaCAuLi4gc3R1cGlkIGNoYW5nZSBraWxsaW5nIHhtbFBhcnNlRG9jKCkKClRodSBOb3YgIDQgMTg6MzI6MjIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGNoYW5naW5nIHRoZSB3YXkgdGhlIC5jIGlzIGdlbmVyYXRlZCwKCSAgZXh0ZW5kaW5nIHRoZSB0ZXN0cyBjb3ZlcmFnZQoJKiBpbmNsdWRlL2xpYnhtbC9uYW5vZnRwLmggbmFub2Z0cC5jIGVsZmdjY2hhY2suaCBkb2MvKjogZml4aW5nIHNvbWUKCSAgZnVuY3Rpb24gc2lnbmF0dXJlcywgcmVnZW5lcmF0aW5nIHN0dWZmCgkqIFNBWDIuYyBwYXJzZXIuYyB4bWxJTy5jOiBhbm90aGVyIHNldCBvZiBidWcgZml4ZXMgYW5kIEFQSSBoYXJkZW5pbmcKClRodSBOb3YgIDQgMTM6MzI6MTkgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IGV4dGVuZGluZyB0aGUgdGVzdHMgY292ZXJhZ2UKClRodSBOb3YgIDQgMTE6NTI6MjggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGdlbnRlc3QucHkgd2FzIG1pc3NpbmcgZnJvbSB0aGUgRVhUUkFfRElTVAoKVGh1IE5vdiAgNCAxMTo0ODo0NyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogZXh0ZW5kaW5nIHRoZSB0ZXN0cyBjb3ZlcmFnZQoJKiBIVE1MdHJlZS5jIHRyZWUuYyB4bWxzYXZlLmMgeHBvaW50ZXIuYzogbW9yZSBmaXhlcyBhbmQgY2xlYW51cHMKClRodSBOb3YgIDQgMDA6MjU6MzYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgZml4ZXMgYW5kIGV4dGVuZGluZyB0aGUgdGVzdHMgY292ZXJhZ2UKCSogbmFub2Z0cC5jIHhtbElPLmM6IG1vcmUgZml4ZXMgYW5kIGhhcmRlbmluZwoJCldlZCBOb3YgIDMgMjA6MTY6MjQgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgZml4ZXMgYW5kIGV4dGVuZGluZyB0aGUgdGVzdHMgY292ZXJhZ2UKCSogdmFsaWQuYzogYnVuY2ggb2YgY2xlYW51cHMgYW5kIDIgbGVha3MgcmVtb3ZlZCAKCldlZCBOb3YgIDMgMTg6MDY6NDQgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2VudGVzdC5weSB0ZXN0YXBpLmM6IG1vcmUgZml4ZXMgYW5kIGV4dGVuZGluZyB0aGUgdGVzdHMgY292ZXJhZ2UKCSogbGlzdC5jIHRyZWUuYzogbW9yZSBmaXhlcyBhbmQgaGFyZGVuaW5nCgpXZWQgTm92ICAzIDE1OjE5OjIyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIGZpeGVzIGFuZCBleHRlbmRpbmcgdGhlIHRlc3RzIGNvdmVyYWdlCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IGFkZGluZyBhIHR5cGUgaW5pdCBpbnRlcmZhY2UKCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBwYXJzZXIuYyB4bWxyZWFkZXIuYyB4bWx3cml0ZXIuYzogbW9yZQoJICBjbGVhbnVwcyBhbmQgYnVnIGZpeGVzIHJhaXNlZCBieSB0aGUgcmVncmVzc2lvbiB0ZXN0cwoKV2VkIE5vdiAgMyAxMjo0OTozMCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBmaXhlcyBhbmQgZXh0ZW5kaW5nIHRoZSB0ZXN0cyBjb3ZlcmFnZQoJKiB4bWx3cml0ZXIuYyBsaXN0LmM6IG1vcmUgaGFyZGVpbmcgb2YgQVBJcwoJKiBkb2MvYXBpYnVpbGQucHk6IHNraXAgdGVzdGFwaS5jIHdoZW4gc2Nhbm5pbmcgdGhlIEMgZmlsZXMuCgpUdWUgTm92ICAyIDIzOjA5OjA2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdlbnRlc3QucHkgdGVzdGFwaS5jOiBtb3JlIHRlc3RpbmcgYW5kIGNvdmVyYWdlCgkqIGVsZmdjY2hhY2suaCB4bWxzdHJpbmcuYyBpbmNsdWRlL2xpYnhtbC94bWxzdHJpbmcuaDogbW9yZSBjbGVhbnVwcwoJKiBkb2MvKjogcmVidWlsdAoKVHVlIE5vdiAgMiAxOTo0NDozMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnZW50ZXN0LnB5IHRlc3RhcGkuYzogbW9yZSBkZXZlbG9wbWVudHMgb24gdGhlIEFQSSB0ZXN0aW5nCgkqIEhUTUxwYXJzZXIuYyB0cmVlLmM6IG1vcmUgY2xlYW51cHMKCSogZG9jLyo6IHJlYnVpbHQKClR1ZSBOb3YgIDIgMTU6NDk6MzQgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmMgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGFkZGluZyB4bWxNZW1CbG9ja3MoKQoJKiBNYWtlZmlsZS5hbSBnZW50ZXN0LnB5IHRlc3RhcGkuYzogd29yayBvbiBnZW5lcmF0b3Igb2YgYW4KCSAgYXV0b21hdGljIEFQSSByZWdyZXNzaW9uIHRlc3QgdG9vbC4KCSogU0FYMi5jIG5hbm9mdHAuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgeG1sSU8uYwoJICB4bWxzdHJpbmcuYzogdmFyaW91cyBBUEkgaGFyZGVpbmcgY2hhbmdlcyBhcyBhIHJlc3VsdCBvZiBydW5uaW5nCgkgIHRlaCBmaXJzdCBzZXQgb2YgYXV0b21hdGljIEFQSSByZWdyZXNzaW9uIHRlc3RzLgoJKiB0ZXN0L3NsYXNoZG90MTYueG1sOiBhcHBhcmVudGx5IG1pc3NpbmcgZnJvbSBDVlMsIGNvbW1pdGVkIGl0CgpNb24gTm92ICAxIDE1OjU0OjE4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGFuIFVURi04IHBhcnNpbmcgYnVnIHJlcG9ydGVkIGJ5IE1hcmt1cyBCZXJ0aGVhdQoJICBvbiAjZmVkb3JhLWRldmVsCgpTdW4gT2N0IDMxIDIyOjAzOjM4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIGJ1ZyByZXBvcnRlZCBieSBQZXRyIFBhamFzIG9uIHRoZSBsaXN0IGFuZAoJICBhZmZlY3RpbmcgWE1MOjpMaWJ4bWwKClN1biBPY3QgMzEgMTY6MzM6NTQgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYyBkb2MvZXhhbXBsZXMvdGVzdFdyaXRlci5jOiBGaXhlZCBidWcgIzE1MzkzNywgbWFraW5nCgkgIHN1cmUgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGUgd3JpdHRlbi4KCSAgSGFkIHRvIGZpeCBvbmUgb2YgdGhlIGV4YW1wbGVzLgoKRnJpIE9jdCAyOSAxNDoxNjo1NiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbGxpbnQuMSBkb2MveG1sbGludC54bWw6IGluZGljYXRlIC0gbWVhbnMgc3RkaW4gY2xvc2luZyAjMTU2NjI2CgpGcmkgT2N0IDI5IDE0OjAzOjM2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IHJlZ2lzdGVyIHhtbFNjaGVtYVNldFZhbGlkRXJyb3JzLCBwYXRjaCBmcm9tCgkgIEJyZW50IEhlbmRyaWNrcyBpbiB0aGUgbWFpbGluZy1saXN0CgkqIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggSFRNTHBhcnNlci5jIFNBWDIuYyB2YWxpZC5jCgkgIHBhcnNlckludGVybmFscy5jOiBmaXggIzE1NjYyNiBhbmQgbW9yZSBnZW5lcmFsbHkgaG93IHRvIGZpbmQgb3V0CgkgIGlmIGEgdmFsaWRhdGlvbiBjb250ZWN0IGlzIHBhcnQgb2YgYSBwYXJzaW5nIGNvbnRleHQgb3Igbm90LiBUaGlzCgkgIGNhbiBwcm9iYWJseSBiZSBpbXByb3ZlZCB0byBtYWtlIDEwMCUgc3VyZSB0aGF0IHZjdHh0LT51c2VyRGF0YQoJICBpcyB0aGUgcGFyc2VyIGNvbnRleHQgdG9vLiBJdCdzIGEgYml0IGhhaXJ5IGJlY2F1c2Ugd2UgY2FuJ3QgCgkgIGNoYW5nZSB0aGUgeG1sVmFsaWRDdHh0IHN0cnVjdHVyZSB3aXRob3V0IGJyZWFraW5nIHRoZSBBQkkgc2luY2UKCSAgdGhpcyBjaGFuZ2UgeG1sUGFyc2VyQ3R4dCBpbmZvcm1hdGlvbiBpbmRleGVzLgoKV2VkIE9jdCAyNyAxOToyNjoyMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogQ2hhbmdlTG9nIE5FV1MgY29uZmlndXJlLmluIGRvYy8qOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjYuMTUKCSogZGVidWdYTUwuYyBuYW5vZnRwLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBjbGVhbnVwcwoKV2VkIE9jdCAyNyAwOTozMToyNCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHVyaS5jOiBmaXhlZCBhIHN0dXBpZCBtaXN0YWtlIGluIHhtbEJ1aWxkUmVsYXRpdmVVUkkKCSAgKGJ1ZyAxNTY1MjcpCgpXZWQgT2N0IDI3IDExOjQ0OjM1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogc2Vjb25kIHBhcnQgb2YgdGhlIHNlY3VyaXR5IGZpeCBmb3IKCSAgeG1sTmFub0ZUUENvbm5lY3QoKSBhbmQgeG1sTmFub0hUVFBDb25uZWN0SG9zdCgpLgoKVHVlIE9jdCAyNiAyMzo1NzowMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2Z0cC5jOiBhcHBsaWVkIGZpeGVzIGZvciBhIGNvdXBsZSBvZiBwb3RlbnRpYWwgc2VjdXJpdHkgcHJvYmxlbXMKCSogdHJlZS5jIHZhbGlkLmMgeG1sbGludC5jOiBtb3JlIGZpeGVzIG9uIHRoZSBzdHJpbmcgaW50ZXJuaW5nIGNoZWNrcwoKVHVlIE9jdCAyNiAxODowOTo1OSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhZGRlZCBjaGVja2luZyBmb3IgbmFtZXMKCSAgdmFsdWVzIGFuZCBkaWN0aW9ubmFyaWVzIGdlbmVyYXRlcyBhIHRvbnMgb2YgZXJyb3JzCgkqIFNBWDIuY2NhdGFsb2cuYyBwYXJzZXIuYyByZWxheG5nLmMgdHJlZS5jIHhpbmNsdWRlLmMgeG1sd3JpdGVyLmMKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBmaXhpbmcgdGhlIGVycm9ycyBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0cwoKTW9uIE9jdCAyNSAxNjowNDoyMiBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBtb2RpZmllZCB0aGUgaGFuZGxpbmcgb2YgX3ByaXZhdGUgZm9yIGVudGl0eQoJICBleHBhbnNpb24gKGJ1ZyAxNTU4MTYpCgpNb24gT2N0IDI1IDE3OjExOjM3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgdGhlIGxlYWsgcmVwb3J0ZWQgYnkgVm9sa2VyIFJvdGggb24gdGhlIGxpc3QKCSogdGVzdC9lbnQxMCByZXN1bHQvL2VudDEwKjogYWRkZWQgYSBzcGVjaWZpYyB0ZXN0IGZvciB0aGUgcHJvYmxlbQoKU2F0IE9jdCAyMyAxMTowNzo0MSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IHVubGlua2VkIHRoZSBpbnRlcm5hbCBzdWJzZXQgd2l0aGluIHhtbFZhbGlkYXRlRHRkCgkgIChidWcgMTQxODI3KQoJKiBjb25maWd1cmUuaW46IGFkZGVkIC1XYWxsIHRvIGRldmVsb3BlcidzIGZsYWdzCgkqIGRvYy9leGFtcGxlcy9yZWFkZXI0LnJlczogYWRkZWQgdG8gQ1ZTCgpGcmkgT2N0IDIyIDE2OjM2OjUwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGFkZGVkIHN1cHBvcnQgZm9yIEhUTUwgUElzICMxNTYwODcKCSogdGVzdC9IVE1ML3B5dGhvbi5odG1sIHJlc3VsdC9IVE1ML3B5dGhvbi5odG1sKjogYWRkZWQgc3BlY2lmaWMgdGVzdHMKCkZyaSBPY3QgMjIgMTU6MjA6MjMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRocmVhZHMuYzogZml4ZWQgbmFzdHkgYnVnICMxNTYwODcKCkZyaSBPY3QgMjIgMjE6MDQ6MjAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogZml4ZWQgYSBwcm9ibGVtIG9jY3VyaW5nIG9ubHkgaW4geDg2XzY0IHdoZW4KCSAgdmVyeSBsYXJnZSBlcnJvciBtZXNzYWdlcyBhcmUgcmFpc2VkIHRvIHRoZSBQeXRob24gaGFuZGxlcnMuCgpUaHUgT2N0IDIxIDE4OjAzOjIxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIGEgbWVtb3J5IGJ1ZwoJKiBkb2MvZXhhbXBsZXMvcmVhZGVyNC5jIGRvYy9leGFtcGxlcy8qOiBhZGRlZCB0ZXN0IGZyb20gR3JhaGFtIEJlbm5ldHQKCSAgYW5kIHJlZ2VuZXJhdGVkIHRoZSBkaXJlY3RvcnkKClR1ZSBPY3QgMTkgMTE6MDY6MzkgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIHhtbHJlYWRlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20KCSAgR3JhaGFtIEJlbm5ldHQgYWRkaW5nIDQgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIHRoZSByZWFkZXIgQVBJLgoKRnJpIE9jdCAxNSAxMToyMjo0OCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRlYnVnWE1MLmM6IGV4Y2x1ZGVkIGEgZmV3IG5vZGVzICh3aXRoIG5vIGNvbnRlbnQpIGZyb20gdGhlCgkgIHN0cmluZyBjaGVjayByb3V0aW5lLgoKRnJpIE9jdCAxNSAxMDo0ODozMCBFRFQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGFkZGVkIFVURi04IHN0cmluZyBjaGVja2luZywKCSAgcmFpc2UgYSBwcm9ibGVtLCBuZWVkIGRlYnVnCgpXZWQgT2N0IDEzIDAyOjE3OjM2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IGFwcGxpZWQgcGF0Y2ggZnJvbSBUaG9tYXMgRml0enNpbW1vbnMgZml4aW5nCgkgICMxNTUyNDAgYnVpbGRpbmcgb3V0c2lkZSB0aGUgc291cmNlIHRyZWUuIGJ1dCBtYWtlIHRlc3RzIGZhaWxzLgoKTW9uIE9jdCAxMSAxNjoyNjo1MSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhZGRlZCBuYW1lc3BhY2UgY2hlY2tpbmcKClNhdCBPY3QgIDkgMjI6MzY6MjEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IHNvbWUgZnJhbWV3b3JrIHByZXBhcmF0aW9uIHRvIGFkZCBuYW1lc3BhY2UgY2hlY2tpbmdzCgpUaHUgT2N0ICA3IDE1OjEyOjU4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmggaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDoKCSAgYWRkaW5nIHRoZSB0cmVlIGRlYnVnIG1vZGUKCSogcGFyc2VyLmMgcmVsYXhuZy5jIHRyZWUuYyB4cGF0aC5jOiBmaXhpbmcgdmFyaW91cyBwcm9ibGVtcyByZXBvcnRlZAoJICBieSB0aGUgZGVidWcgbW9kZS4KCSogU0FYMi5jOiBhbm90aGVyIHRyZWUgZml4IGZyb20gUm9iIFJpY2hhcmRzCgpXZWQgT2N0ICA2IDEwOjUwOjAzIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY2F0YWxvZy5jOiBzbWFsbCBjaGFuZ2UgdG8gbGFzdCBmaXgsIHRvIGdldCB4bWw6YmFzZSByaWdodAoKV2VkIE9jdCAgNiAwOTozMzo1MSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNhdGFsb2cuYzogYWRkZWQgY29kZSB0byBoYW5kbGUgPGdyb3VwPiwgaW5jbHVkaW5nIGR1bXBpbmcKCSAgdG8gb3V0cHV0IChidWcgMTUxOTI0KS4KCSogeG1sY2F0YWxvZy5jLCB4bWxzdHJpbmcuYywgcGFyc2VyLmM6IG1pbm9yIGNvbXBpbGVyIHdhcm5pbmcgCgkgIGNsZWFudXAgKG5vIGNoYW5nZSB0byBsb2dpYykKCSAgCk1vbiBPY3QgIDQgMTY6MDk6MDcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkZWJ1Z1hNTC5jIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjogcmV2YW1wZWQgdGhlIFhNTCBkZWJ1Z2dpbmcKCSAgbW9kdWxlIGFuZCBwcmVwYXJlIGZvciBhIG5ldyBjaGVja2luZyBtb2RlCgpNb24gT2N0ICA0IDEzOjUzOjI0IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIE1hbGNvbG0gVHJlZGlubmljayBmaXhpbmcgYnVnICMxNTI0MjYKCk1vbiBPY3QgIDQgMTI6MjY6MjggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi90ZXN0cy9vdXRidWYucHk6IAoJICBhcHBsaWVkIHBhdGNoIGZyb20gTWFsY29sbSBUcmVkaW5uaWNrIGZpeGluZyBidWcgIzE1NDI5NAoJICByZWxhdGVkIHRvIHNhdmluZyB0byBweXRob24gZmlsZSBvYmplY3RzLgoKU2F0IE9jdCAgMiAyMTowODo1MSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRyZWUuYzogY2hhbmdlZCB4bWxIYXNOc1Byb3AgdG8gcHJvcGVybHkgaGFuZGxlIGEgcmVxdWVzdCBmb3IKCSAgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIChidWcgMTUzNTU3KQoKU2F0IE9jdCAgMiAxODoxODoyNyBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtIHdpdGggZGljdGlvbmFyeSBoYW5kbGluZyB3aXRoaW4KCSAgeG1sUGFyc2VJbk5vZGVDb250ZXh0IChidWcgMTUzMTc1KQoKU2F0IE9jdCAgMiAxNTo0NjozNyBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weSwgY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlMi5weSwKCSAgY2hlY2steGluY2x1ZGUtdGVzdC1zdWl0ZS5weSwgY2hlY2steG1sLXRlc3Qtc3VpdGUucHksCgkgIGNoZWNrLXhzZGRhdGEtdGVzdC1zdWl0ZS5weSwgZG9jL2V4YW1wbGVzL2luZGV4LnB5OiBjaGFuZ2VkCgkgIGNoYW5nZWQgc3lzLnBhdGggc2V0dGluZyBmcm9tICdhcHBlbmQnIHRvICdpbnNlcnQnIChwYXRjaAoJICBzdXBwbGllZCBieSBNYWxjb2xtIFRyZWRpbm5pY2spIChidWcgMTUzNzE2KQoKU2F0IE9jdCAgMiAxNTowMzoxNCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOiBhZGRlZCB0d28gbmV3IG1hY3JvcwoJICBJU19BU0NJSV9MRVRURVIgYW5kIElTX0FTQ0lJX0RJR0lUIHVzZWQgd2l0aCAoaHRtbCkKCSAgcGFyc2luZyBhbmQgeHBhdGggZm9yIHRlc3RpbmcgZGF0YSBub3QgbmVjZXNzYXJpbHkKCSAgdW5pY29kZS4KCSogSFRNTHBhcnNlci5jLCB4cGF0aC5jOiBjaGFuZ2VkIHVzZSBvZiBJU19MRVRURVJfQ0ggYW5kCgkgIElTX0RJR0lUX0NIIG1hY3JvcyB0byBhc2NpaSB2ZXJzaW9ucyAoYnVnIDE1MzkzNikuCgkgIApGcmkgT2N0ICAxIDIwOjM3OjI1IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZXJyb3IuYzogYWRkZWQgc29tZSBjb2RpbmcgdG8gYXR0ZW1wdCB0byBkaXNwbGF5IHdoaWNoIGZpbGUKCSAgY29udGFpbnMgYW4gZXJyb3Igd2hlbiB1c2luZyBYSW5jbHVkZSAoYnVnIDE1MjYyMykKClRodSBTZXAgMzAgMTE6MTk6MTcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogc3R1cGlkIGN1dCduIHBhc3RlIGJ1ZyBpbiB4bWxsaW50IGRldGVjdGlvbgoKV2VkIFNlcCAyOSAxNzo0Nzo1NiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy8qOiByZWxlYXNpbmcgMi42LjE0LCByZWJ1aWxkaW5nIHRoZSBkb2NzCgkgIApXZWQgU2VwIDI5IDE1OjAwOjExIENFU1QgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmgKCSAgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOiBQYXJzaW5nIG9mIDxjb21wbGV4Q29udGVudD4KCSAgLSBoYW5kbGUgYXR0cmlidXRlICdtaXhlZCcsIGNhdGNoIGlsbGVnYWwgYXR0cmlidXRlcy4KCSAgUGFyc2luZyBvZiA8Y29tcGxleFR5cGU+IC0gaGFuZGxlIGF0dHJpYnV0ZXMgJ2Fic3RyYWN0JywKCSAgJ2ZpbmFsJyBhbmQgJ2Jsb2NrJywgY2F0Y2ggaWxsZWdhbCBhdHRyaWJ1dGVzLgoJICBWYWxpZGF0aW9uIG9mIGNvbXBsZXggdHlwZXMgLSBoYW5kbGUgYWJzdHJhY3QgdHlwZXMuCgkgIEFkZGVkIGhhbmRsaW5nIG9mIGRlZmF1bHQvZml4ZWQgYXR0cmlidXRlcyBhbmQgZWxlbWVudCB2YWx1ZXMuCgkgIFBlciB2YWxpZGF0aW9uIG9wdGlvbiBhdHRyaWJ1dGUgbm9kZXMvdGV4dCBub2RlcyBhcmUgY3JlYXRlZAoJICBvbiB0aGUgaW5zdGFuY2UuCgkgIEFkZGVkIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0cmFpbnRzIGZvciBmaXhlZC9kZWZhdWx0LgoJICBBZGRlZCB4bWxTY2hlbWFTZXRWYWxpZE9wdGlvbnMsIHhtbFNjaGVtYUdldFZhbGlkT3B0aW9ucwoJICB0byB0aGUgZXh0ZXJuYWwgQVBJLgoJICBFeHRlbmRlZCBlbGVtZW50IGRlY2xhcmF0aW9uIGNvbnN0cmFpbnRzLiAgCgkgIEdvdCByaWQgb2YgcGVyc2V2ZXJhdGl2ZSBjcmVhdGlvbiBvZiB0ZW1wb3JlcnkgdmFsaWRhdGlvbi9wYXJzZXIgCgkgIGNvbnRleHRzLgoJICBBZGRlZCBoYW5kbGluZyBvZiB4c2k6c2NoZW1hTG9jYXRpb24gYW5kCgkgIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uLgoJICBGaXhlZCB4c2k6dHlwZSBjb21wb25lbnQgcmVzb2x1dGlvbiBpZiB1c2luZyBub24tcHJlZml4ZWQKCSAgUU5hbWVzLgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaDoKCSAgRW5hYmxlZCBuYW1lc3BhY2UgYXdhcmVuZXNzIG9mIHRoZSBjb250ZW50IG1vZGVsIGlmIHVzaW5nIHRoZQoJICBtb2RlbCBncm91cCAiYWxsIi4KCSogdGVzdC9zY2hlbWFzL2J1ZzE1MjQ3MF8xLnhzZDogUmVtb3ZlZCBhbiAiYWJzdHJhY3QiIGF0dHJpYnV0ZSwKCSAgd2hpY2ggYnJva2UgdGhlIHRlc3QuCgkqIHhzdGMveHN0Yy5weTogIFdvcmthcm91bmQgdG8gYWNjb21vZGF0ZSBjYXNlIGluc2Vuc2l0aXZlCgkgIHRlc3QgZGVmaW5pdGlvbnMgaW4gbXMtdGVzdC5kZWYueG1sICh3YXMgbWlzc2luZyBpbiBhIHByZXZpb3VzCgkgIGNvbW1pdCkuCgpXZWQgU2VwIDI5IDExOjAzOjEwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZHJ2X2xpYnhtbDIucHk6IGFub3RoZXIgcGF0Y2ggZnJvbSBNYWxjb2xtIFRyZWRpbm5pY2sKCSAgYWRkaW5nIG9wdGlvbiBub3QgdG8gbG9hZCBkdGQgZnJvbSB0aGUgZHJ2X2xpYnhtbDIucHkgbW9kdWxlCgkgICMxMzQ2MzMKClR1ZSBTZXAgMjggMTQ6MzA6MjIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGFjY29uZmlnLmggY29uZmlnLmguaW4gY29uZmlndXJlLmluIHhtbElPLmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jCgkgIHhtbHNjaGVtYXN0eXBlcy5jOiBhbm90aGVyIHBhdGNoIGZyb20gTWFsY29sbSBUcmVkaW5uaWNrIGZpeGluZwoJICB3YXJuaW5nIGdlbmVyYXRlZCBieSB0aGUgTm9uc3RvcCBLZXJuZWwgT3BlbiBTeXN0ZW0gU2VydmljZXMgCgkgIGNvbXBpbGVyICMxNTE3MTAKClR1ZSBTZXAgMjggMTM6MDc6MzcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYWxjb2xtIFRyZWRpbm5pY2sgZml4aW5nCgkgIHB5dGhvbiBleGNlcHRpb24gaGllcmFyY2h5ICMxMzk4MjQKClN1biBTZXAgMjYgMTY6NDA6MjQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgVE9ETzogYXBwbGllZCBwYXRjaCBmcm9tIE1hbGNvbG0gVHJlZGlubmljayBmaXhpbmcgZXJyYXRhCgkgIEUyMCBjb25jZXJuaW5nIE5NVE9LRU5TIGFuZCBjby4gdmFsaWRhdGlvbiAjMTUzNzIyCgkqIHJlc3VsdC9WQy9BdHRyaWJ1dGVObXRva2VucyB0ZXN0L1ZDL0F0dHJpYnV0ZU5tdG9rZW5zCgkgIHRlc3QvVkNNL0F0dHJpYnV0ZU5tdG9rZW5zLnhtbDogYWxzbyBhZGRlZCB0ZXN0cyBmcm9tIE1hbGNvbG0KClN1biBTZXAgMjYgMTY6MjQ6NDQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhzdGMveHN0Yy5weTogYXBwbGllZCBwYXRjaCBmcm9tIE1hbGNvbG0gVHJlZGlubmljayBmaXhpbmcgc3BhY2UvdGFicwoJICAjMTUzNzEzCgkqIHhwYXRoLmM6IGZpeGVkIGEgcmVhbGxvYyBwb3RlbnRpYWwgcHJvYmxlbQoKRnJpIFNlcCAyNCAxNjoxNDoxMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGZpeGVkIG1ha2UgdmFsZ3JpbmQgeHN0YyAKClRodSBTZXAgMjMgMTg6MjM6NDYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhpbmcgYW4gb3V0IG9mIGJvdW5kIGFkcmVzc2luZyBpc3N1ZQoKVGh1IFNlcCAyMyAxNToxNDoxMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jIHJlbGF4bmcuYyB4bWxzY2hlbWFzLmM6IG1vcmUgbWVtb3J5IHJlbGF0ZWQKCSAgY29kZSBjbGVhbnVwcy4KClRodSBTZXAgMjMgMDE6MDQ6MzAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIGJ1bmNoIG9mIGVycm9ycyB3aGVuIHJlYWxsb2MgZmFpbGVkLgoKV2VkIFNlcCAyMiAyMzo1NjowNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGhyZWFkcy5jIHVyaS5jOiBjb3VwbGUgb2YgbWVtb3J5IGZpeGVzIGZyb20gTWFyayBWYWtvYyByZXBvcnRlZAoJICBieSBQdXJpZnkgb24gV2luZG93cy4KCk1vbiBTZXAgMjAgMjI6MDE6NDcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkZWQgLS10aW1pbmcgLS1jb3B5IHRpbWluZyBmb3IgdGhlIGNvcHkKCSogdm1zL2J1aWxkX2xpYnhtbC5jb206IGFwcGxpZWQgcGF0Y2ggZnJvbSBDcmFpZyBCZXJyeQoJICB0byBidWlsZCB3aXRoIHJlY2VudCByZWxlYXNlcwoKRnJpIFNlcCAxNyAyMToyNTozMyBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIG5hbm9odHRwLmMsIGluY2x1ZGUvbGlieG1sL25hbm9odHRwLmg6IGFkZGVkIHRoZSByb3V0aW5lCgkgIHhtbE5hbm9IVFRQQ29udGVudExlbmd0aCB0byB0aGUgZXh0ZXJuYWwgQVBJIChidWcxNTE5NjgpLgoJKiBwYXJzZXIuYzogZml4ZWQgdW5uZWNlc3NhcnkgaW50ZXJuYWwgZXJyb3IgbWVzc2FnZSAoYnVnMTUyMDYwKTsKCSAgYWxzbyBjaGFuZ2VkIGNhbGwgdG8gc3RybmNtcCBvdmVyIHRvIHhtbFN0cm5jbXAuCgkqIGVuY29kaW5nLmM6IGZpeGVkIGNvbXBpbGF0aW9uIHdhcm5pbmcgKGJ1ZzE1MjMwNykuCgkqIHRyZWUuYzogZml4ZWQgc2VnZmF1bHQgaW4geG1sQ29weVByb3BMaXN0IChidWcxNTIzNjgpOyBmaXhlZAoJICBhIGNvdXBsZSBvZiBjb21waWxhdGlvbiB3YXJuaW5ncy4KCSogSFRNTHRyZWUuYywgZGVidWdYTUwuYywgeG1sbWVtb3J5LmM6IGZpeGVkIGEgZmV3IGNvbXBpbGF0aW9uCgkgIHdhcm5pbmdzOyBubyBjaGFuZ2UgdG8gbG9naWMuCgpGcmkgU2VwIDE3IDEwOjQwOjIzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcmVtb3ZlZCBzb21lIGV4dGVybiBiZWZvcmUgZnVuY3Rpb24gY29kZSByZXBvcnRlZCBieQoJICBLamFydGFuIE1hcmFhcyBvbiBJUkMKCSogbGVnYWN5LmM6IGZpeGVkIGNvbXBpbGluZyB3aGVuIGNvbmZpZ3VyaW5nIG91dCB0aGUgSFRNTCBwYXJzZXIKCSogTWFrZWZpbGUuYW06IGFkZGVkIGEgZGVjbGFyYXRpb24gZm9yIENWU19FWFRSQV9ESVNUCgkqIEhUTUxwYXJzZXIuYzogYmVnaW5uaW5nIG9mIGFuIGF0dGVtcHQgYXQgY2xlYW5pbmcgdXAgdGhlIGNvbnN0cnVjdGlvbgoJICBvZiB0aGUgSFRNTCBwYXJzZXIgZGF0YSBzdHJ1Y3R1cmVzLCBjdXJyZW50IGRhdGEgZ2VuZXJhdGUgYSBodWdlCgkgIGFtb3VudCBvZiBFTEYgcmVsb2NhdGlvbnMgYXQgbG9hZGluZyB0aW1lLgoKRnJpIFNlcCAxNyAxMDozNjoyMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogQ2hhbmdlTG9nOiBhcHBsaWVkIGZpeCBmcm9tIFN0ZXBhbiBLYXNhbCB0byBmaXggZHVwbGljYXRpb24KCSAgaW4gdGhlIGNoYW5nZSBsb2cgYW5kIGNsZWFudXAgb2Ygc3BhY2UvdGFicyBpc3N1ZXMuCgpUaHUgU2VwIDE2IDEzOjI0OjI3IENFU1QgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIAoJICB0ZXN0L3NjaGVtYXMvYnVnMTUyNDcwXzEuKiByZXN1bHQvc2NoZW1hcy9idWcxNTI0NzBfMV8xKjogCgkgIFNpbXBpZmllZCBhdHRyaWJ1dGUgd2lsZGNhcmQgY3JlYXRpb24gYW5kIGFzc2lnbm1lbnQgdG8gZ2V0IHJpZCAKCSAgb2YgbWVtb3J5IGxlYWtzLgoJICBSZXN0cnVjdHVyZWQgdGhlIHZhbGlkYXRpb24gcHJvY2Vzcy4KCSAgUmVzdHJ1Y3R1cmVkIGFuZCBleHBhbmRlZCBwYXJzaW5nIG9mIDxhdHRyaWJ1dGVHcm91cD4uCgkgIEFkZGVkIGluaXRpYWwgaGFuZGluZyBvZiB4c2k6dHlwZS4KCSAgQWR2YW5jZWQgaGFuZGxpbmcgb2YgeHNpOm5pbCAoc2hvdWxkIHdvcmsgbm93IGZvciBzaW1wbGUgdHlwZXMpLgoJICBBZGRlZCBjb25zdHJ1Y3Rpb24gb2Ygc2NoZW1hdGEgdXNpbmcgeHNpOnNjaGVtYUxvY2F0aW9uIGFuZCAKCSAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb247IHRoaXMgaXMgbm90IGVuYWJsZWQsIHNpbmNlIAoJICBubyBjb3JyZXNwb25kaW5nIEFQSSBleGlzdHMgeWV0LgoJICBNb3ZlZCB0aGUgY29udGVudCBtb2RlbCB0byBjb21wbGV4IHR5cGUgY29tcG9uZW50cy4KCSAgUmVzb2x1dGlvbiBvZiB0eXBlcyBmb3IgYXR0cmlidXRlcyB3aWxsIGxvb2sgZm9yIHNpbXBsZSB0eXBlcwoJICBvbmx5IChpbmNsLiBhbGwgdGhlIGJ1aWx0LWluIHNpbXBsZSB0eXBlcykuCgkgIEV4dGVuZGVkIHBhcnNpbmcgb2YgJ2FueUF0dHJpYnV0ZScuCgkgIEZpeGVkIGNvbnRlbnQtdHlwZSB0eXBlIGZvciBjb21wbGV4IHR5cGVzIGlmIGRlcml2ZWQgZnJvbSAKCSAgJ2FueVR5cGUnIHVzaW5nIHRoZSBzaG9ydC1oYW5kIGZvcm0gKHNlZSBidWcgIyAxNTI0NzAsCgkgIHN1Ym1pdHRlZCBieSBUaGlsbyBKZXJlbWlhcykuCgkqIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXR5cGVzLmg6IENsZWFuZWQgdXAgc29tZSBjb21tZW50cy4KCSogeHN0Yy94c3RjLnB5OiBXb3JrYXJvdW5kIHRvIGFjY29tb2RhdGUgY2FzZSBpbnNlbnNpdGl2ZQoJICB0ZXN0IGRlZmluaXRpb25zIGluIG1zLXRlc3QuZGVmLnhtbC4KCSogcmVzdWx0L3NjaGVtYXMvZGV0ZXIwXzBfMC5lcnIgcmVzdWx0L3NjaGVtYXMvbnMwXzBfMi5lcnIKCSAgcmVzdWx0L3NjaGVtYXMvbnMwXzFfMi5lcnI6IEFkYXB0ZWQuCgpTYXQgU2VwIDExIDA5OjA0OjIyIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sd3JpdGVyLmM6IGNoYW5nZWQgY2hhciBhcnJheSBpbml0aWFsaXNhdGlvbiB0byBhdm9pZCBhCgkgIGNvbXBsYWludCBmcm9tIHNvbWUgY29tcGlsZXIocykgKGJ1ZyAxNTIzMDgpCgpUaHUgU2VwICA5IDA3OjIyOjExIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYzogYXBwbGllZCBmaXhlcyBmb3IgdGhlIFVURjhUb0lTTzg4NTl4IHRyYW5zY29kaW5nCgkgIHJvdXRpbmUgc3VnZ2VzdGVkIGJ5IE1hcmsgSXR6Y292aXR6CgpXZWQgU2VwICA4IDIyOjUwOjI3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHhtbHNhdmUuYzogZml4ZWQgMiBwcm9ibGVtcyByYWlzZWQgYnkgIzE1MjE0MCwgb25lCgkgIHdoaWNoIGlzIHRoYXQgbm90YXRpb24gbm90IGluIHRoZSBpbnRlcm5hbCBzdWJzZXQgc2hvdWxkCgkgIG5vdCBiZSBzYXZlZCwgYW5kIHRoZSBzZWNvbmQgbW9yZSBuYXN0eSBvbiBhbiBlcnJvciBzYXZpbmcKCSAgTk9UQVRJT05zLCBpZiB0aGVyZSBpcyBhIHByb29mIHRoYXQgbm9ib2R5IHVzZXMgbm90YXRpb25zICEKCldlZCBTZXAgIDggMTE6MDQ6MjcgQ0VTVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6IEFkZGVkIHRoZSBmdW5jdGlvbgoJICB4bWxTY2hlbWFWYWxpZGF0ZU9uZUVsZW1lbnQgdG8gdGhlIFhNTCBTY2hlbWEgdmFsaWRhdGlvbiBBUEksIAoJICBhcyBwcm9wb3NlZCBieSBKZWZmcmV5IEZpbmsgLSBzZWUgYnVnICMgMTUyMDczLgoKVHVlIFNlcCAgNyAxMToxMDozNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy9NYWtlZmlsZS5hbSB4c3RjL01ha2VmaWxlLmFtOiBzb21lIGNsZWFudXAKCSAgY2hlY2tpbmcgZm9yIHhtbGxpbnQgYW5kIHhzbHRwcm9jIGluIGNvbmZpZ3VyZS5pbiwgZml4ZWQKCSAgbWFrZSBkaXN0IHcuci50LiB0aGUgbmV3IHhzdGMgc3ViZGlyLgoJKiBkb2MvKjogcmVidWlsdAoKTW9uIFNlcCAgNiAxNjo0Mjo1OSBDRVNUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeHN0Yy94c3RjLnB5OiBDaGFuZ2VkIHRvIGZpbmFsbHkgdmFsaWRhdGUgaW5zdGFuY2UgZG9jdW1lbnRzLgoKTW9uIFNlcCAgNiAxNjowNDowMSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHN0Yy9NYWtlZmlsZS5hbSBNYWtlZmlsZS5hbTogaW50ZWdyYXRlZCB0byAibWFrZSB2YWxncmluZCIsCgkgIGhlYXZ5IC4uLiB3ZWlnaHQgMjUwTUIgb2YgVk0gIQoKTW9uIFNlcCAgNiAxNDo1NDozOSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHN0Yy9NYWtlZmlsZS5hbSB4c3RjL3hzdGMtdG8tcHl0aG9uLnhzbCB4c3RjL3hzdGMucHkgTWFrZWZpbGUuYW06CgkgIG1vcmUgY2xlYW51cCBpbiBpbnRlZ3JhdGluZyB0aGUgeHN0YyB0ZXN0c3VpdGUKCk1vbiBTZXAgIDYgMTM6NTY6MjggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiB4c3RjLy5jdnNpZ25vcmUgeHN0Yy9NYWtlZmlsZS5hbToKCSAgc3RhcnRpbmcgdG8gaW50ZWdyYXRlIHRoZSB4c3RjIHN1aXRlIGluIHRoZSBub3JtYWwgcmVncmVzc2lvbgoJICB0ZXN0cwoKTW9uIFNlcCAgNiAxMzoxNDoxMSBDRVNUIDIwMDQgS2FzaW1pZXIgQnVjaGNpayA8bGlieG1sMi1jdnNAY2F6aWMubmV0PgoKCSogeHN0Yy9zdW4tdGVzdC1kZWYueG1sOiBUaGUgInRzRGlyIiBhdHRyaWJ1dGUgd2FzIG5vdAoJICBzZXQgY29ycmVjdGx5LgoKTW9uIFNlcCAgNiAxMTo1Mjo1MCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steGluY2x1ZGUtdGVzdC1zdWl0ZS5weTogd2hlbiBvdXRwdXQgYW5kIGV4cGVjdGVkIGRvIG5vdCBtYXRjaAoJICBleGFjdGx5IHJ1biBkaWZmIHRvIHB1dCB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGxvZyBjLmYuICMxNDg2OTEKCk1vbiBTZXAgIDYgMTE6MTc6MzUgQ0VTVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhzdGMveHN0Yy10by1weXRob24ueHNsdCB4c3RjL21zLXRlc3QtZGVmLnhtbCB4c3RjL25pc3QtdGVzdC1kZWYueG1sCgkgIHhzdGMvc3VuLXRlc3QtZGVmLnhtbDogSW5pdGlhbCByZWxlYXNlIG9mIGdlbmVyYXRpb24gZmlsZXMgdG8gCgkgIGNyZWF0ZSBweXRob24gdGVzdCBzY3JpcHRzLCB3aGljaCB3aWxsIHJ1biB0aGUgVzNDIFhNTCBTY2hlbWEgVGVzdAoJICBDb2xsZWN0aW9uLiBUaGUgbXMtdGVzdC1kZWYueG1sIGFuZCBzdW4tdGVzdC1kZWYueG1sIGZpbGVzCgkgIHdlcmUgZXh0cmFjdGVkIGZyb20gdGhlIG9ubGluZSBIVE1MIFhTVEMgcmVzdWx0cyBbMV0sIHNpbmNlIHRoZXkgZGlkCgkgIG5vdCBleGlzdCBmb3IgdGhlIFNVTiB0ZXN0cywgYW5kIG9ubHkgcGFydGlhbGx5IGRpZCBleGlzdCBmb3IgdGhlIAoJICBNUyB0ZXN0cy4gVGhlIE5JU1QgZGVmaW5pdGlvbiBmaWxlIHdhcyBjcmVhdGVkIGJ5IGNvbmNhdGVuYXRpb24KCSAgb2YgdGhlIGV4aXN0aW5nIGRlZmluaXRpb24gZmlsZXMgZm9yIGVhY2ggc2luZ2xlIGRhdGF0eXBlLgoJICBUaGUgc3R5bGVzaGVldCAieHN0Yy10by1weXRob24ueHNsdCIgc2hvdWxkIGJlIHJ1biBhZ2FpbnN0IHRoZQoJICBkZWZpbml0aW9uIGZpbGVzIHRvIHByb2R1Y2UgdGhlIHB5dGhvbiBzY3JpcHRzLgoJICBbMV0gImh0dHA6Ly93d3cudzMub3JnL1hNTC8yMDAxLzA1L3htbHNjaGVtYS10ZXN0LWNvbGxlY3Rpb24vCgkgIHJlc3VsdHMtbWFzdGVyLmh0bWwiCgpGcmkgU2VwICAzIDIwOjI5OjU5IENFU1QgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IEZpeGVkIGEgc2VnIGZhdWx0IGluIHhtbEdldFFOYW1lUHJvcDoKCSAgYSBmb3JtYXQgYXJndW1lbnQgd2FzIG1pc3NpbmcuCgkgIEZpeGVkIHdyb25nIGFzc2lnbm1lbnQgb2YgdGhlIG93bmVyIG9mIGEgd2lsZGNhcmQgaW4KCSAgeG1sU2NoZW1hQnVpbGRBdHRyaWJ1dGVWYWxpZGF0aW9uIChpbiB0aGUgc2hvcnRoYW5kZm9ybSBvZgoJICA8Y29tcGxleFR5cGU+OyB0aGlzIGNhdXNlZCBhIHNlZyBmYXVsdCwgZHVlIHRvIGEgZG91YmxlLWZyZWUKCSAgb2YgdGhlIHdpbGRjYXJkLgoJICBBZGRlZCBhIGNoZWNrIGZvciBjaXJjdWxhciBhdHRyaWJ1dGUgZ3JvdXAgcmVmZXJlbmNlcy4KCSAgQWRkZWQgYSBjaGVjayBmb3IgY2lyY3VsYXIgbW9kZWwgZ3JvdXAgZGVmaW5pdGlvbiByZWZlcmVuY2VzLgoJICBGaXhlZCBhIGR1YmxpY2F0ZSB4bWxQYXJzZXJFcnJvcnMgZW51bSB2YWx1ZSAtIHNlZSBidWcgIzE1MTczOC4KCkZyaSBTZXAgIDMgMTA6MDg6MTMgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbW0uY29tLmhrPgoKCSogeG1sc3RyaW5nLmM6IG1vZGlmaWVkIGNvbW1lbnRzIG9uIHhtbEdldFVURjhDaGFyIGluCgkgIHJlc3BvbnNlIHRvIGJ1ZyAxNTE3NjAgKG5vIGNoYW5nZSB0byBsb2dpYykKClR1ZSBBdWcgMzEgMDk6NDY6MTggUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzdHJpbmcuYzogZml4ZWQgZXJyb3IgcmVwb3J0ZWQgb24gdGhlIGxpc3QgY2F1c2VkIGJ5CgkgIG15IGxhc3QgY2hhbmdlCgpUdWUgQXVnIDMxIDE1OjQxOjUyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBORVdTIGNvbmZpZ3VyZS5pbiBkb2MvKjogcmVsZWFzZSBvZiBsaWJ4bWwyLTIuNi4xMwoKVHVlIEF1ZyAzMSAxNDoxNDozMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogZml4aW5nICMxNTE0NTYsIGFuIGVuY29kaW5nIGVycm9yIGNvdWxkIGdlbmVyYXRlCgkgIGEgc2VyaWFsaXphdGlvbiBsb29wLgoKVHVlIEF1ZyAzMSAxMTozNDowNCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFsc28gcHJvZHVjZSBhIHRhciBiYWxsIHdpdGgganVzdCB0aGUgc291cmNlcwoJKiB4bWxsaW50LmM6IGFkZGVkIC0tcGF0aCBvcHRpb24gYW5kIC0tbG9hZC10cmFjZSBvcHRpb25zIHRvCgkgIHhtbGxpbnQsIFJGRSAjMTQ3NzQwIGJhc2VkIG9uIHhzbHRwcm9jIHZlcnNpb25zCgkqIGRvYy94bWxsaW50LiogZG9jLyo6IHVwZGF0ZWQgdGhlIG1hbiBwYWdlIGFuZCByZWJ1aWx0CgpUdWUgQXVnIDMxIDEwOjM3OjIzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogIiIgaXMgYSB2YWxpZCBoZXhiaW5hcnkgc3RyaW5nIGRpeGl0IHhtbHNjaGVtYS1kZXYKCSogcmVzdWx0L3NjaGVtYXMvaGV4YmluYXJ5XzBfMS5lcnIgdGVzdC9zY2hlbWFzL2hleGJpbmFyeV8xLnhtbDogCgkgIHVwZGF0ZSB0aGUgdGVzdC4KCSogdGVzdC9uczUgcmVzdWx0Ly9uczUqOiBhZGRlZCBhIHRlc3QgZm9yIHRoZSBuYW1lc3BhY2UgYnVnIGZpeGVkCgkgIGluIHByZXZpb3VzIGNvbW1pdC4KCSogTWFrZWZpbGUuYW06IGFkZGVkIGEgbWVzc2FnZSBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0cwoKTW9uIEF1ZyAzMCAyMzozNjoyMSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIFNBWDIuYzogZml4ZWQgYnVnIGludHJvZHVjZWQgZHVyaW5nIE9PTSBmaXh1cCBjYXVzaW5nIHByb2JsZW1zCgkgIHdpdGggZGVmYXVsdCBuYW1lc3BhY2Ugd2hlbiBhIG5hbWVkIHByZWZpeCB3aXRoIHRoZSBzYW1lIGhyZWYKCSAgd2FzIHByZXNlbnQgKHJlcG9ydGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QgYnkgS2FybCBFaWNod2FsZGVyLgoJKiB4bWxzdHJpbmcuYzogbW9kaWZpZWQgeG1sQ2hlY2tVVEY4IHdpdGggc3VnZ2VzdGVkIGNvZGUgZnJvbQoJICBKdWxpdXMgTWl0dGVuendlaS4KCSogZGljdC5jOiBhZGRlZCBhIHR5cGVjYXN0IHRvIHRyeSB0byBhdm9pZCBwcm9ibGVtIHJlcG9ydGVkIGJ5CgkgIFBhc2NhbCBSb2Rlcy4KCk1vbiBBdWcgMzAgMTI6NDU6NDYgQ0VTVCAyMDA0IEthc2ltaWVyIEJ1Y2hjaWsgPGxpYnhtbDItY3ZzQGNhemljLm5ldD4KCgkqIHhtbHNjaGVtYXMuYzogRml4ZWQgYSBidWcgaW4geG1sU2NoZW1hc0NoZWNrRmFjZXQsIHdoaWNoIGRpZAoJICBub3QgY3JlYXRlIGEgY29tcHV0ZWQgdmFsdWUgb24gYSBmYWNldCBhbmQgdGh1cyBjcmFzaGVkIGR1cmluZwoJICB2YWxpZGF0aW9uIG9mIGluc3RhbmNlcy4KCSAgRXhwYW5kZWQgdmFsaWRpdHkgY2hlY2tzIGZvciBtaW4vbWF4T2NjdXJzIGF0dHJpYnV0ZXMuCgkgIEV4cGFuZGVkIHZhbGlkaXR5IGNoZWNrcyBmb3IgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgImZvcm0iLgoKRnJpIEF1ZyAyNyAxODozMjoyNCBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHN0cmluZy5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCB4bWxDaGVja1VURjggcmVwb3J0ZWQgb24gdGhlCgkgIG1haWxpbmcgbGlzdCBieSBKdWxpdXMgTWl0dGVuendlaQoKRnJpIEF1ZyAyNyAwMDoxMzozOSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGFkZGVkIEJ1aWxkUmVxdWlyZXM6ICB6bGliLWRldmVsLCBmaXhlcwoJICBSZWQgSGF0IGJ1ZyAjMTI0OTQyCgpUaHUgQXVnIDI2IDEyOjI3OjIzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcmVtb3ZlIGEgd2FybmluZyBvbiBTb2xhcmlzCgkqIHhtbHNjaGVtYXN0eXBlLmM6IGZpeCBhIGNyYXNoaW5nIGJ1ZyAjMTUxMTExCgpXZWQgQXVnIDI1IDIyOjIwOjE4IENFU1QgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB0ZXN0L3NjaGVtYXMvaW1wb3J0LWJhZC0xXzAuaW1wOiBBZGRlZCBtaXNzaW5nIHRlc3QgZmlsZS4KCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOgoJICBTdWJzdGl0dXRlZCB0aGUgb2Jzb2xldGUgeG1sU2NoZW1hVmFsaWRFcnJvcihzKSBmb3IgeG1sUGFyc2VyRXJyb3JzCgkgIC0gc2VlICMxNTA4NDAuIAoJICBDaGFuZ2VkIHRoZSBpbXBvcnQgb2Ygc2NoZW1hcyB0byBhbGxvdyBmYWlsdXJlIG9mIGxvY2F0aW9uCgkgIG9mIGEgcmVzb3VyY2UgdG8gYmUgaW1wb3J0ZWQuCgkqIHJlc3VsdC9zY2hlbWFzL2FsbF8qIHJlc3VsdC9zY2hlbWFzL2FueTNfMF8wLmVyciAKCSAgcmVzdWx0L3NjaGVtYXMvY2hvaWNlXyogcmVzdWx0L3NjaGVtYXMvaW1wb3J0MV8wXzAuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL2xpc3QwXzBfMS5lcnIgcmVzdWx0L3NjaGVtYXMvbGlzdDBfMV8wLmVycgoJICByZXN1bHQvc2NoZW1hcy9saXN0MF8xXzEuZXJyIHJlc3VsdC9zY2hlbWFzL25zMF8wXzIuZXJyCgkgIHJlc3VsdC9zY2hlbWFzL25zMF8xXzIuZXJyOiBBZGFwdGVkIHJlZ3Jlc3Npb24gdGVzdCByZXN1bHRzLgoKVHVlIEF1ZyAyNCAyMDo0OToxNSBNRFQgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbCwgeG1sdHV0b3JpYWwucGRmLCAqLmh0bWwKCWZpeCBYcGF0aCBtZW1vcnkgbGVhayAodGhhbmtzIHRvIHNLYUJveSBhbmQgV2lsbGlhbSBCcmFjaykKClR1ZSBBdWcgMjQgMjE6MTA6NTkgQ0VTVCAyMDA0IElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgcGF0aCBwcm9ibGVtIGluIERURCBsb2FkaW5nIHJlcG9ydGVkIGJ5IAoJICBTYW1lZXIgQWJoaW5rYXIKClR1ZSBBdWcgMjQgMTY6NDA6NTEgQ0VTVCAyMDA0IElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFkZGVkIHN1cHBvcnQgZm9yIHZlcnNpb24gZXh0cmEKCSogd2luMzIvTWFrZWZpbGUuKjogdXBncmFkZWQgdG8gemxpYiAxLjIuMQoKTW9uIEF1ZyAyMyAxNDozMzo1NCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiByZW1vdmluZyAtTyAtZyBmcm9tIGRlZmF1bHQgZ2NjIGZsYWdzICMxNTA4MjgKClN1biBBdWcgMjIgMTY6MjY6NDYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKiBORVdTOiBwcmVwYXJpbmcgMi42LjEyIHJlbGVhc2UsIHVwZGF0ZWQgYW5kCgkgIGFuZCByZWJ1aWx0IHRoZSBkb2NzLgoKU3VuIEF1ZyAyMiAxNjowNzoyMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBmaXggYSBwcm9ibGVtIG9uIGxhc3QgY29tbWl0CgpTdW4gQXVnIDIyIDE1OjE2OjUzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aC5oIAoJICBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oIHB5dGhvbi9saWJ4bWwuYyAKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmg6IHRyeWluZyB0byByZW1vdmUgc29tZSB3YXJuaW5nIHdoZW4gY29tcGlsaW5nCgkgIG9uIEZlZG9yYSBDb3JlIDMgYW5kIDY0Yml0cwoKU2F0IEF1ZyAyMSAwOjAzNToxMCBDRVQgMjAwNCBLYXNpbWllciBCdWNoY2lrIDxsaWJ4bWwyLWN2c0BjYXppYy5uZXQ+CgoJKiB4bWxzY2hlbWFzLmM6IG1vZGlmaWVkIHBhcnNpbmcgb2YgPGxpc3Q+LCA8dW5pb24+LCA8cmVzdHJpY3Rpb24+LAoJICA8c2VxdWVuY2U+LCA8Y2hvaWNlPiwgPGluY2x1ZGU+LCA8aW1wb3J0Pi4KCSAgRml4ZWQgc2NoZW1hIGRlZmF1bHRzIChlbGVtZW50Rm9ybURlZmF1bHQsIGV0Yy4pIGZvciBpbmNsdWRlZAoJICBzY2hlbWFzLgoJICBGaXhlZCBhIGJ1ZyB3aGljaCByZXBvcnRlZCBhdHRyaWJ1dGVzIGFzIGludmFsaWQgb24KCSAgZWxlbWVudHMgZGVjbGFyYXRpb25zIHdpdGggdGhlIGJ1aWx0LWluIHR5cGUgJ2FueVR5cGUnLgoJICBBZGRlZCAibGF4IiB2YWxpZGF0aW9uIG9mIHRoZSBjb250ZW50IG9mIGVsZW1lbnRzIG9mIHR5cGUKCSAgJ2FueVR5cGUnLgoJICBGaXhlZDogZWxlbWVudCBkZWNsYXJhdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIHdlcmUgdHJlYXRlZAoJICBhcyBkdXBsaWNhdGUgaWYgbG9jYXRlZCBpbiB0aGUgc3VidHJlZSBvZiA8Y2hvaWNlPiAtPiA8c2VxdWVuY2U+LgoJICAoVGhpcyB3YXMgYnVnIDE1MDYyMywgc3VibWl0dGVkIGJ5IFJvbGFuZCBMZXp1bykKCSAgRml4ZWQgY2xlYW51cCBvZiBlcnJvciBjb2RlcyBpbiB4bWxTY2hlbWFWYWxpZGF0ZURvYyBhcyBwcm9wb3NlZAoJICBieSBJZ29yIEthcGl0YW5rZXIuIChUaGlzIHdhcyBidWcgMTUwNjQ3LCBzdWJtaXR0ZWQgYnkgSWdvcgoJICBLYXBpdGFua2VyKQoJKiB4bWxzY2hlbWFzdHlwZXMuYzogQ2hhbmdlZCB0aGUgdHlwZSBvZiBhbnlUeXBlIHRvCgkgIFhNTF9TQ0hFTUFTX0FOWVRZUEUuCgkqIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IEFkZGVkIHNjaGVtYSBwYXJzZXIgZXJyb3JzLgoJKiByZXN1bHQvc2NoZW1hcy9idWcxNDUyNDZfMF8wKgoJICByZXN1bHQvc2NoZW1hcy9leHRlbnNpb24xXzBfMi5lcnI6IENoYW5nZWQgdGVzdCByZXN1bHRzLgoJKiByZXN1bHQvc2NoZW1hcy9jdC1zYy1ub2Jhc2VfMF8wKgoJICByZXN1bHQvc2NoZW1hcy9mYWNldC13aGl0ZVNwYWNlXzBfMCoKCSAgcmVzdWx0L3NjaGVtYXMvaW1wb3J0MV8wXzAqIHJlc3VsdC9zY2hlbWFzL2ltcG9ydDJfMF8wKgoJICByZXN1bHQvc2NoZW1hcy9pbmNsdWRlMl8wXzAqIHJlc3VsdC9zY2hlbWFzL2luY2x1ZGUzXzBfMCoKCSAgcmVzdWx0L3NjaGVtYXMvcmVzdHJpY3Rpb24tYXR0cjFfMF8wKgoJICByZXN1bHQvc2NoZW1hcy9zZXEtZHVibC1lbGVtMV8wXzAqCgkgIHJlc3VsdC9zY2hlbWFzL3hzZC1saXN0LWl0ZW1UeXBlXzBfMCo6IEFkZGVkIG5ldyByZXN0IHJlc3VsdHMuCgkgIHRlc3Qvc2NoZW1hcy9idWcxNDUyNDYueHNkLmltcCB0ZXN0L3NjaGVtYXMvY3Qtc2Mtbm9iYXNlXzAqCgkgIHRlc3Qvc2NoZW1hcy9mYWNldC13aGl0ZVNwYWNlXzAqIHRlc3Qvc2NoZW1hcy9pbXBvcnQxXzAqCgkgIHRlc3Qvc2NoZW1hcy9pbXBvcnQyXzAqIHRlc3Qvc2NoZW1hcy9pbmNsdWRlMl8wKgoJICB0ZXN0L3NjaGVtYXMvaW5jbHVkZTNfMCogdGVzdC9zY2hlbWFzL3Jlc3RyaWN0aW9uLWF0dHIxXzAqCgkgIHRlc3Qvc2NoZW1hcy9zZXEtZHVibC1lbGVtMV8wKiB0ZXN0L3NjaGVtYXMveG1sLnhzZAoJICB0ZXN0L3NjaGVtYXMveHNkLWxpc3QtaXRlbVR5cGVfMCo6IEFkZGVkIG5ldyB0ZXN0cyBhbmQgbWlzc2luZwoJICBmaWxlcy4gIAkgICAgICAKCkZyaSBBdWcgMjAgMTg6NTE6MzYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogYSBiaXQgb2YgY2xlYW51cCBhbmQgYSBleHRyYSB2YXJpYWJsZSBmb3IKCSAgQ1ZTIGRpc3QKClRodSBBdWcgMTkgMDc6NDQ6MDcgTURUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbCwgeG1sbGludC4xLCB4bWxsaW50Lmh0bWw6CglFZGl0IGFuZCByZWJ1aWxkIHRoZSBtYW4gcGFnZXMgd2l0aCBEYW5pZWwncyBDMTQgdXBkYXRlCgpXZWQgQXVnIDE4IDE5OjE1OjI3IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IGZpeGVkIG1pc3NpbmcgbGluZSBudW1iZXJzIG9uIGVudGl0eSBhcyByZXBvcnRlZAoJICBvbiB0aGUgbGlzdCBieSBTdGV2ZSBDaGVuZwoKV2VkIEF1ZyAxOCAxNDowNDozMSBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGNvbmZpZ3VyZS5pbiBnbG9iYWxzLmMgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCgkgIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiBhZGRlZCBzb21lIGNvZGUgdG8KCSAgaW5jbHVkZSB0aGUgQ1ZTIENoYW5nZUxvZyB2ZXJzaW9uIGluIHRoZSB4bWxQYXJzZXJWZXJzaW9uCgkgIHN0cmluZyAocHJpbnRlZCBieSB4bWxsaW50IHdpdGggLS12ZXJzaW9uKQoKV2VkIEF1ZyAxOCAxMToxNDowNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaCBweXRob24vZ2VuZXJhdG9yLnB5CgkgIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYwoJICBweXRob24vdGVzdHMvc2NoZW1hLnB5IHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbTogQXBwbGllZCBwYXRjaAoJICBmcm9tIFRvcmtlbCBMeW5nIHRvIGFkZCBTY2hlbWFzIHN1cHBvcnQgdG8gdGhlIFB5dGhvbiBiaW5kaW5ncwoJICBhbmQgZXh0ZW5kIHRoZSBzY2hlbWFzIGVycm9yIEFQSSwgcmVnaXN0ZXJlZCBhIG5ldyB0ZXN0LgoJKiBkb2MvKiBlbGZnY2NoYWNrLmg6IHJlYnVpbHQgdG8gcmVnZW5lcmF0ZSB0aGUgYmluZGluZ3MKCk1vbiBBdWcgMTYgMTQ6MzY6MjUgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFkZGVkIGhlbHAgZm9yIG5ldyBzZXQgc2hlbGwgY29tbWFuZAoJKiB4aW5jbHVkZS5jIHhtbGxpbnQuYyB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDoKCSAgYWRkZWQgcGFyc2VyIG9wdGlvbiB0byBub3QgZ2VuZXJhdGUgWEluY2x1ZGUgc3RhcnQvZW5kIG5vZGVzLAoJICBhZGRlZCBhIHNwZWNpZmljIG9wdGlvbiB0byB4bWxsaW50IHRvIHRlc3QgaXQgZml4ZXMgIzEzMDc2OQoJKiBNYWtlZmlsZS5hbTogcmVncmVzc2lvbiB0ZXN0IHRoZSBuZXcgZmVhdHVyZQoJKiBkb2MveG1sbGludC4xIGRvYy94bWxsaW50LnhtbDogdXBkYXRlZCBtYW4gcGFnZSB0byBkb2N1bWVudCBvcHRpb24uCgpNb24gQXVnIDE2IDAyOjQyOjMwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBzbWFsbCB0eXBvIHBvaW50ZWQgb3V0IGJ5IE1pa2UgSG9tbWV5CgkqIGRvYy94bWxsaW50LnhtbCwgeG1sbGludC5odG1sLCB4bWxsaW50LjE6IHNsaWdodGx5IGltcHJvdmVkCgkgIHRoZSAtLWMxNG4gZGVzY3JpcHRpb24sIGMuZi4gIzE0NDY3NSAuCgkqIG5hbm9odHRwLmMgbmFub2Z0cC5jOiBhcHBsaWVkIGEgZmlyc3Qgc2ltcGxlIHBhdGNoIGZyb20gCgkgIE1pa2UgSG9tbWV5IGZvciAkbm9fcHJveHksIGMuZi4gIzEzMzQ3MAoJKiBwYXJzZXJJbnRlcm5hbHMuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBjbGVhbnVwIHRvIGF2b2lkICdlcnJvcicgaWRlbnRpZmllciAKCSAgaW4gaW5jbHVkZXMgIzEzNzQxNAoJKiBwYXJzZXIuYyBTQVgyLmMgZGVidWdYTUwuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDoKCSAgZmlyc3QgdmVyc2lvbiBvZiB0aGUgaW5wbGVtZW50YXRpb24gb2YgcGFyc2luZyB3aXRoaW4KCSAgdGhlIGNvbnRleHQgb2YgYSBub2RlIGluIHRoZSB0cmVlICMxNDIzNTksIG5ldyBmdW5jdGlvbgoJICB4bWxQYXJzZUluTm9kZUNvbnRleHQoKSwgYWRkZWQgc3VwcG9ydCBhdCB0aGUgeG1sbGludCAtLXNoZWxsCgkgIGxldmVsIGFzIHRoZSAic2V0IiBmdW5jdGlvbgoJKiB0ZXN0L3NjcmlwdHMvc2V0KiByZXN1bHQvc2NyaXB0cy8qIE1ha2VmaWxlLmFtOiBleHRlbmRlZAoJICB0aGUgc2NyaXB0IGJhc2VkIHJlZ3Jlc3Npb24gdGVzdHMgdG8gaW5zdHJ1bWVudCB0aGUgbmV3IGZ1bmN0aW9uLgoKU2F0IEF1ZyAxNCAxODo1MzowOCBNRFQgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sLCB4bWxsaW50Lmh0bWwsIHhtbGxpbnQuMToKCWFkZCBjMTRuIHRvIG1hbiBwYWdlIChtYW4sIGl0J3MgaGFyZCB0byBrZWVwIHVwIHdpdGgKCURhbmllbCEpCgpTYXQgQXVnIDE0IDE4OjQ1OjM4IE1EVCAyMDA0IEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwsIHhtbGxpbnQuaHRtbCwgeG1sbGludC4xOgoJYWRkIHBhdHRlcm4sIHdhbGtlciwgbWF4bWVtLCBvdXRwdXQgYW5kIHhtbG91dCB0byBtYW4gcGFnZQoJZml4ZXMgIzE0NDY3NQoKU3VuIEF1ZyAxNSAwMDo0MToxMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRlZCBhIC0tYzE0biBvcHRpb24gdG8gY2Fub25pY2FsaXplIHRoZSBvdXRwdXQKCSAgc2hvdWxkIGNsb3NlIHRoZSBSRkUgIzE0MzIyNgoKU2F0IEF1ZyAxNCAyMzo1MDoxMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBEb2RqaSBwb2ludGVkIG91dCBhIGJ1ZyBpbiB4bWxHZXROb2RlUGF0aCgpCgkqIHhtbGNhdGFsb2cuYzogYXBwbGllZCBwYXRjaCBmcm9tIEFsYmVydCBDaGluIHRvIGFkZCBhCgkgIC0tbm8tc3VwZXItdXBkYXRlIG9wdGlvbiB0byB4bWxjYXRhbG9nIHNlZSAjMTQ1NDYxCgkgIGFuZCBhbm90aGVyIHBhdGNoIGFsc28gZnJvbSBBbGJlcnQgQ2hpbiB0byBub3QgY3Jhc2ggCgkgIG9uIC1zZ21sIC0tZGVsIHdpdGhvdXQgYXJncyBzZWUgIzE0NTQ2MgoJKiBNYWtlZmlsZS5hbTogYXBwbGllZCBhbm90aGVyIHBhdGNoIGZyb20gQWxiZXJ0IENoaW4gdG8KCSAgZml4IGEgcHJvYmxlbSB3aXRoIGRpZmYgb24gU29sYXJpcyAjMTQ1NTExCgkqIHhtbHN0cmluZy5jOiBmaXggeG1sQ2hlY2tVVEY4KCkgYWNjb3JkaW5nIHRvIHRoZSBzdWdnZXN0aW9uCgkgIGluIGJ1ZyAjMTQ4MTE1CgkqIHB5dGhvbi9saWJ4bWwucHk6IGFwcGx5IGZpeCBmcm9tIE1hcmMtQW50b2luZSBQYXJlbnQgYWJvdXQKCSAgdGhlIGVycm9ycyBpbiBsaWJ4bWwoMikucHkgb24gdGhlIG5vZGUgd3JhcHBlciAjMTM1NTQ3CgpTYXQgQXVnIDE0IDEzOjE4OjU3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgYSBkdW1iIHJ1bGUgdG8gYWJsZSB0byBjb21waWxlIHRzdC5jCgkgIHdoZW4gcGVvcGxlIHN1Ym1pdCBhIHNhbXBsZSB0ZXN0IHByb2dyYW0KCSogeG1sc2NoZW1hcy5jOiBhcHBsaWVkIHNtYWxsIHBhdGNoIGZyb20gRXJpYyBIYXN6bGFraWV3aWN6CgkgIHRvIGRvY3VtZW50IHhtbFNjaGVtYXNTZXRWYWxpZEVycm9ycygpIGxpbWl0YXRpb25zLCAjMTQxODI3CgkqIGVycm9yLmM6IEFkZCBpbmZvcm1hdGlvbiBpbiBnZW5lcmljIGFuZCBzdHJ1Y3R1cmVkIGVycm9yCgkgIHNldHRlciBmdW5jdGlvbnMgdGhhdCB0aGlzIG5lZWQgdG8gYmUgZG9uZSBwZXIgdGhyZWFkICMxNDQzMDgKCSogeG1sc2F2ZS5jOiBmaXhlZCBidWcgd2hpdGggbWlzc2luZyBOT1RBVElPTihzKSBzZXJpYWxpemF0aW9uCgkgIGJ1ZyAjMTQ0MTYyCgkqIGRvYy94bWxsaW50LnhtbDogdHlwbyBmaXggIzE0NDg0MAoKVHVlIEF1ZyAxMCAwNzoxOTozMSBQRFQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4geG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jCgkgIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oCgkgIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOiBhcHBsaWVkIFNjaGVtYXMgcGF0Y2hlcwoJICBmcm9tIEthc2ltaWVyIEJ1Y2hjaWsKCSogdGVzdC8gcmVzdWx0LyBidWcxNDEzMzMqIGFubm90LWVyciogYW55WzEtNF0qIGJ1ZzE0NTI0NioKCSAgZWxlbWVudC1lcnIqIGVsZW1lbnQtbWlubWF4LWVyciogaW5jbHVkZTEqIHJlc3RyaWN0LUNULWF0dHItcmVmKjoKCSAgbG90IG9mIG5ldyB0ZXN0cyBmb3IgdGhpbmdzIGZpeGVkIGJ5IHRoZSBwYXRjaAoKRnJpIEF1ZyAgNiAwOToyMjozNCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IGZpeGVkIG15IG1pcy1oYW5kbGluZyBvZiBFeHRlcm5hbCBJRCBvbiBsYXN0CgkgIGNoYW5nZS4KCldlZCBBdWcgIDQgMjM6NDA6MjEgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB2YWxpZC5jOiBjaGFuZ2VkIHRoZSBwYXJzaW5nIG9mIGEgZG9jdW1lbnQncyBEVEQgdG8gdXNlCgkgIHRoZSBwcm9wZXIgYmFzZSBwYXRoIChidWcgMTQ0MzY2KQoKV2VkIEF1ZyAgNCAxNjo1ODowOCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlnLmguaW4gY29uZmlndXJlLmluIHB5dGhvbi9NYWtlZmlsZS5hbToKCSAgYXBwbGllZCBhIHBhdGNoIGZyb20gR2Vycml0IFAuIEhhYXNlIHRvIGdldCBweXRob24gYmluZGluZ3MKCSAgb24gQ3lnd2luCgpUdWUgQXVnICAzIDE1OjA4OjIyIFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogZWxhYm9yYXRlZCBvbiBkZXNjcmlwdGlvbiBvZgoJICB4bWxWYWxpZGl0eVdhcm5pbmdGdW5jIGFuZCB4bWxWYWxpZGl0eUVycm9yRnVuYyAoYnVnCgkgIDE0NDc2MCkKCSogeG1sSU8uYywgeG1sc2NoZW1hc3R5cGVzLmMsIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNpbnRlcm5hbHMuaDoKCSAgbWlub3IgZml4ZXMgdG8gY29tbWVudHMgZm9yIGRvYyByZWJ1aWxkaW5nIGVycm9ycy4KCSogZG9jLyouaHRtbDogcmVidWlsdCB0aGUgZG9jcwoKVHVlIEF1ZyAgMyAyMzo1OToyMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL0NoYW5nZUxvZy54c2wgZG9jL2Rvd25sb2Fkcy5odG1sIGRvYy94bWwuaHRtbCBkb2MvKjoKCSAgZml4ZXMgZG9jdW1lbnRhdGlvbiBnbGl0Y2hlcyByYWlzZWQgYnkgT2xpdmVyIFN0b2VuZWJlcmcKClR1ZSBBdWcgIDMgMDk6NDI6MzEgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0cmVlLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBtZW1vcnkgbGVhayBvbiB0ZXh0IG5vZGVzIGluIERURAoJICAoYnVnIDE0ODk2NSkgd2l0aCBwYXRjaCBwcm92aWRlZCBieSBEYXJyZWxsIEtpbmRyZWQKClR1ZSBBdWcgIDMgMDg6MTQ6NDQgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGluaXRpYWxpc2F0aW9uIHByb2JsZW0gZm9yIGh0bWxSZWFkTWVtb3J5CgkgIChidWcgMTQ5MDQxKQoKU2F0IEp1bCAzMSAxMTowMTozMyBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9idWlsZERvY0Jvb2tDYXRhbG9nOiBlbmhhbmNlZCBwZXIgYnVnIDExOTg3Ni4gIEZ1cnRoZXIKCSAgaW5mbyBwb3N0ZWQgdG8gdGhlIG1haWxpbmcgbGlzdC4KClNhdCBKdWwgMzEgMDk6MTI6NDQgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBTQVgyLmMsIGVuY29kaW5nLmMsIGVycm9yLmMsIHBhcnNlci5jLCB0cmVlLmMsIHVyaS5jLCB4bWxJTy5jLAoJICB4bWxyZWFkZXIuYywgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBtYW55IGZ1cnRoZXIgbGl0dGxlIGNoYW5nZXMKCSAgZm9yIE9PTSBwcm9ibGVtcy4gIE5vdyBzZWVtcyB0byBiZSBnZXR0aW5nIGNsb3NlciB0byAib2siLgoJKiB0ZXN0T09NLmM6IGFkZGVkIGNvZGUgdG8gaW50ZXJjZXB0IG1vcmUgZXJyb3JzLCBmb3VuZCBtb3JlCgkgIHByb2JsZW1zIHdpdGggbGlicmFyeS4gQ2hhbmdlZCBtZXRob2Qgb2YgZmxhZ2dpbmcgLyBjb3VudGluZwoJICBlcnJvcnMgaW50ZXJjZXB0ZWQuCgpGcmkgSnVsIDMwIDEzOjU3OjU1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgYSBjb3VwbGUgb2YgcGF0Y2ggb25lIGZyb20gT2xpdmVyIFN0b2VuZWJlcmcKCSAgYW5kIGFub3RoZXIgb25lIGZyb20gUm9iIFJpY2hhcmRzIGZpeGluZyAjMTQ4NDQ4CgpUaHUgSnVsIDI5IDEzOjIwOjI4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IDEgbGluZSBwYXRjaCwgYXBwYXJlbnRseSBodG1sTmV3RG9jKCkgd2FzIG5vdAoJICBzZXR0aW5nIGRvYy0+Y2hhcnNldC4KClRodSBKdWwgMjkgMDA6MDU6NTggUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBTQVgyLmMsIHRyZWUuYywgdXJpLmMsIHhtbElPLmMsIHhtbHJlYWRlci5jOiBmdXJ0aGVyCgkgIGZpeGVzIGZvciBvdXQgb2YgbWVtb3J5IGNvbmRpdGlvbiwgbW9zdGx5IGZyb20gT2xpdmllcgoJICBBbmRyaWV1LgoJKiB0ZXN0T09NLmM6IHNvbWUgZnVydGhlciBpbXByb3ZlbWVudCBieSBPbGl2aWVyLCB3aXRoCgkgIGEgZnVydGhlciBzbWFsbCBlbmhhbmNlbWVudCBmb3IgZWFzaWVyIGRlYnVnZ2luZy4KClR1ZSBKdWwgMjcgMDA6MzQ6MDcgUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBTQVgyLmMsIGVycm9yLmMsIHBhcnNlci5jLCB0cmVlLmMsIHhtbHJlYWRlci5jOgoJICBpbXBsZW1lbnRlZCBwYXRjaGVzIHN1cHBsaWVkIGJ5IE9saXZpZXIgQW5kcmlldSAKCSAgKGJ1ZyAxNDg1ODgpLCBwbHVzIG1hZGUgc29tZSBmdXJ0aGVyIGVuaGFuY2VtZW50cywgdG8KCSAgY29ycmVjdCBzb21lIHByb2JsZW1zIHdpdGggb3V0IG9mIG1lbW9yeSBjb25kaXRpb25zLgoJKiB0ZXN0T09NLmM6IGltcHJvdmVkIHdpdGggcGF0Y2hlcyBmcm9tIE9saXZpZXIgQW5kcmlldQoKTW9uIEp1bCAyNiAxMTowMzoxOCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRyZWUuYzogcHV0IGluIHBhdGNoIGZvciBXaW5kb3dzIGJ1ZmZlciByZS1hbGxvY2F0aW9uCgkgIHN1Ym1pdHRlZCBieSBTdGV2ZSBIYXkgKGJ1ZyAxNDY2OTcpCgpTdW4gSnVsIDI1IDE3OjE4OjM5IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogYWRkZWQgc29tZSBjb2RlIHRvIGNoZWNrLCB3aGVuIGFuIGluY2x1ZGUgaXMKCSAgZG9uZSwgd2hldGhlciB0aGUgcmVxdWVzdGVkIFVSTCBnZXRzIG1hcHBlZCB0byBzb21lIG90aGVyCgkgIGxvY2F0aW9uIChlLmcuIHdpdGggYSBjYXRhbG9nIGVudHJ5KSBhbmQsIGlmIHNvLCB0YWtlIGNhcmUKCSAgb2YgdGhlIHhtbDpiYXNlIHByb3Blcmx5IChidWcgMTQ2OTg4KQoKU3VuIEp1bCAyNSAxNDowMjoyNCBQRFQgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVycm9yLmM6IGZpeGVkIHRvIGFzc3VyZSB1c2VyIGRhdGEgcGFyYW0gaXMgc2V0IGNvcnJlY3RseQoJICB3aGVuIHVzZXIgc3RydWN0dXJlZCBlcnJvciBoYW5kbGVyIGlzIGNhbGxlZCAoYnVnIDE0NDgyMykKClRodSBKdWwgMjIgMTA6MTQ6NDggUERUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxyZWFkZXIuYzogZml4ZWQgcHJvYmxlbSB3aXRoIHJlYWRlciBzdGF0ZSBhZnRlcgoJICBwcm9jZXNzaW5nIGF0dHJpYnV0ZXMgKGJ1ZyAxNDc5OTMpCgpXZWQgSnVsIDIxIDE3OjA0OjI3IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbTogcHV0IGluIGFuIGF1dG8qIGNoZWNrIGZvciB0aGUKCSAgcGF0aCB0byBwZXJsIChpZiBpdCBleGlzdHMpLCBhbmQgbW9kaWZpZWQgbWFrZSBUaW1pbmd0ZXN0cwoJICB0byB1c2UgdGhhdCBwYXRoIGluc3RlYWQgb2YganVzdCBleGVjdXRpbmcgdGhlIGRiZ2VuYXR0ci5wbAoJICBzY3JpcHQgKGJ1ZyAxNDgwNTYpCgpGcmkgSnVsIDE2IDE4OjM2OjMzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogYWRkZWQgYSBjaGVjayBvbiB0aGUgYXJndW1lbnQgZm9yIHNvbWUKCSAgY2xhc3NlcyAoZS5nLiB4bWxEb2MgYW5kIHhtbE5vZGUpIHRvIHByZXZlbnQgYSBzZWdmYXVsdCAoYXMKCSAgcmVwb3J0ZWQgb24gdGhlIGxpc3QpLiAgRnVydGhlciBlbmhhbmNlbWVudCBzaG91bGQgYmUgZG9uZQoJICB0byBhdXRvLWNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgb2JqZWN0LgoJKiBweXRob24vbGlieG1sLmM6IG1pbm9yIGZpeCBmb3IgYSB3YXJuaW5nIG1lc3NhZ2U7IGFkZGVkIGEKCSAgcm91dGluZSwgY3VycmVudGx5IG5vdCB1c2VkLCB0byByZXBvcnQgdGhlIGRlc2NyaXB0aW9uIG9mIGEKCSAgUHlDT2JqZWN0LgoJKiBweXRob24vbGlieG1sMmNsYXNzLnR4dDogcmVnZW5lcmF0ZWQKCkZyaSBKdWwgMTYgMTE6MDE6NDAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyB0ZXN0L2NhdGFsb2dzL3doaXRlKiByZXN1bHQvY2F0YWxvZ3Mvd2hpdGUqOgoJICBhcHBsaWVkIHBhdGNoZXMgZnJvbSBQZXRlciBCcmVpdGVubG9obmVyIHRvIGZpeCBoYW5kbGluZwoJICBvZiB3aGl0ZSBzcGFjZSBub3JtYWxpemF0aW9uIGluIHB1YmxpYyBpZHMgYW5kIGFkZCB0ZXN0cwoKVHVlIEp1bCAxMyAxNzoyNDoxMyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IGFwcGxpZWQgYSBzbWFsbCBmaXggZnJvbSBTdGV2ZSBIYXkKClR1ZSBKdWwgMTMgMjM6MDI6MTkgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBBZGRlZCBjb2RlIHRvIGluIFBSRURJQ0FURS9GSUxURVIgaGFuZGxpbmcgdG8gcmVzZXQKCSAgdGhlIHhwYXRoIGNvbnRleHQgZG9jdW1lbnQgcG9pbnRlciAocGFydCBvZiBmaXggdG8gbGlieHNsdAoJICBidWcgMTQ3NDQ1KQoKVHVlIEp1bCAxMyAwMDoxNDowOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9saWJ4bWwucHk6IHJhbiAnZXhwYW5kJyBvbiB0aGUgZmlsZSB0byBnZXQgcmlkIG9mIG1peHR1cmUKCSAgb2YgdGFicyBhbmQgc3BhY2VzIChidWcgMTQ3NDI0KQoKU3VuIEp1bCAxMSAyMjozODoyOSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9kcnZfbGlieG1sLnB5OiBhZGRlZCBhbiBlbmNvZGluZyAic3BlY2lhbCBjb21tZW50IiB0byBhdm9pZAoJICB3YXJuaW5nIG1lc3NhZ2UgaW4gcHl0aG9uMi4zIChidWcgMTQ2ODg5KQoJKiBNYWtlZmlsZS5hbSwgcHl0aG9uL01ha2VmaWxlLmFtLCBweXRob24vdGVzdHMvTWFrZWZpbGUuYW06IHNtYWxsCgkgIGNoYW5nZSB0byBtYWtlICJtYWtlIHRlc3RzIiBhIGxpdHRsZSBxdWlldGVyIChNQUtFRkxBR1MrPS0tc2lsZW50KQoJKiB4cGF0aC5jOiBlbmhhbmNlZCB0byB0YWtlIGFkdmFudGFnZSBvZiBjdXJyZW50IGxpYnhzbHQgaGFuZGxpbmcKCSAgb2YgdG1wUlZULiAgRml4ZXMgYnVnIDE0NTU0Ny4KCkZyaSBKdWwgIDkgMTQ6MDI6NTQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oIHVyaS5jOiBmaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtcyBpbiB0aGUgbmV3CgkgIGVsZmdjY2hhY2suaCB0cmljayBwb2ludGVkIGJ5IFBldGVyIEJyZWl0ZW5sb2huZXIKCldlZCBKdWwgIDcgMDA6NDU6NDggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVsZmdjY2hhY2suaCBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbDogZml4ZWQgYSBidWcKCSAgd2hpY2ggcHJldmVudGVkIGJ1aWxkaW5nIHdpdGggLS13aXRoLW1pbmltdW0KCk1vbiBKdWwgIDUgMTk6NDM6NTEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKjogcmVsZWFzaW5nIDIuNi4xMSwgdXBkYXRlZCBhbmQgcmVnZW5lcmF0ZWQgdGhlCgkgIGRvY3MKCk1vbiBKdWwgIDUgMTg6NDM6NDcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBtYWtlIHRoZSBwdXNoIGludGVyZmFjZXMgc3luY2hyb25vdXMKCSogcHl0aG9uL3Rlc3RzL3N5bmMucHk6IGFkZGVkIGEgc3BlY2lmaWMgdGVzdAoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtCgkgIGRvYy9leGFtcGxlcy9pbmRleC5weTogYWRkZWQgdGhlIG5ldyB0ZXN0LCBjbGVhbmluZyB1cCAKCSAgIm1ha2UgdGVzdHMiIG91dHB1dAoKTW9uIEp1bCAgNSAxNTowOToxNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gS2FzaW1pZXIgdG8gZml4IHNvbWUgUmVsYXgtTkcKCSAgZGF0YXR5cGUgZmFjZXQgcHJvYmxlbSB3aXRoIHJlY2VudCBjaGFuZ2VzLgoKU2F0IEp1bCAgMyAxMTozMTowMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9saWJ4bWwuYzogQ2hhbmdlZCB0aGUgbnVtYmVyIG9mIFhQYXRoIGV4dGVuc2lvbiBmdW5jdGlvbnMKCSAgYWxsb3dlZCB0byBiZSB2YXJpYWJsZS1sZW5ndGggKHBhdGNoIHN1cHBsaWVkIGJ5IE1hcmMtQW50b2luZQoJICBQYXJlbnQsIGJ1ZyAxNDM4MDUpLiAgQWRkZWQgY29kZSB0byAidW5yZWdpc3RlciIgdGhlIGZ1bmN0aW9ucwoJICB3aGVuIHRoZSBwYXJzZXIgY2xlYW51cCB0YWtlcyBwbGFjZS4KCkZyaSBKdWwgIDIgMTQ6MjI6MTQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbDoKCSAgc29tZSB1cGRhdGVzIHdpdGggbWVtb3J5IGRlYnVnZ2luZyBmYWNpbGl0aWVzIHdoaWxlIG1lc3NpbmcKCSAgd2l0aCBsaWJ4c2x0IHB5dGhvbiBiaW5kaW5ncwoKVGh1IEp1bCAgMSAxNDo1MzozNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCBweXRob24vbGlieG1sMmNsYXNzLnR4dDoKCSAgYXBwbGllZCBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCB0byBmaXggc29tZSBQeXRob24gYmluZGluZ3MKCSAgaW5pdGlhbGl6YXRpb24sIHRoZW4gaGFkIHRvIGNoYW5nZSB0aGUgcGFyc2VyQ2xlYW51cCgpIAoJICB0byBoYW5kbGUgbWVtb3J5IHJlbGVhc2VkIHRoZXJlLgoJKiB4bWxtZW1vcnkuYzogYWRkZWQgbW9yZSBkZWJ1Z2dpbmcgY29tbWVudHMuCgpUaHUgSnVsICAxIDEzOjE4OjAyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogc2VlbXMgdGhlIHJlYWRlciBidWZmZXIgY291bGQgYmUgdXNlZCB3aGlsZSBub3QKCSAgYWxsb2NhdGVkLCBmaXhlcyBidWcgIzE0NTIxOAoKVGh1IEp1bCAgMSAxMTozNDoxMCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogZG8gbm90IHByb3ZpZGUgZnVuY3Rpb25zIHVzZWQgYXMgZGVzdHJ1Y3RvcgoJICBvZiBjbGFzc2VzIGFzIHB1YmxpYyBtZXRob2RzIHRvIGF2b2lkIGRvdWJsZS1mcmVlIHByb2JsZW0gbGlrZQoJICBpbiBidWcgIzE0NTE4NQoKV2VkIEp1biAzMCAxOTo0NToyMyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYywgeG1sc2NoZW1hc3R5cGVzLmM6IHdhcm5pbmcgbWVzc2FnZSBjbGVhbnVwLgoJICBOb3cgY29tcGlsZXMgd2FybmluZy1mcmVlLCBhbGwgdGVzdHMgcGFzc2VkLgoJKiBTQVgyLmM6IHNtYWxsIGNoYW5nZSB0byBjb21tZW50cyBmb3IgZG9jdW1lbnRhdGlvbi4KCSAgTm8gY2hhbmdlIHRvIGxvZ2ljLgoKVHVlIEp1biAyOSAxNTowMDoxMyBQRFQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IG1vcmUgZml4ZXMgd2l0aCBLYXNpbWllciwgbG9va3MgZmFyIGNsZWFuZXIgOi0pCgpUdWUgSnVuIDI5IDIzOjAwOjA1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IEthc2ltaWVyIEJ1Y2hjaWsgZml4ZWQgdGhlIG1lbW9yeSBhY2Nlc3MgYW5kCgkgIGFsbG9jYXRpb24gcHJvYmxlbQoKVHVlIEp1biAyOSAxOTowMDozMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmgKCSAgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3htbHNjaGVtYXN0eXBlcy5oOgoJICBhcHBsaWVkIFNjaGVtYXMgcGF0Y2hlcyBmcm9tIEthc2ltaWVyIEJ1Y2hjaWssIHRoZXJlIGlzIHN0aWxsCgkgIG9uZSBvcGVuIGlzc3VlIGFib3V0IHJlZmVyZW5jaW5nIGZyZWVkIG1lbW9yeS4KCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogdXBkYXRlZCB3aXRoIG5ldyB0ZXN0cyBmcm9tIAoJICBLYXNpbWllcgoKVHVlIEp1biAyOSAxNDo1MjoxOCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3htbElPLmgKCSAgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvbGlieG1sMi1yZWZzLnhtbDogbW92ZWQgc29tZSBkZWZpbml0aW9ucwoJICB0byBnbG9iYWxzLmggdG8gYXZvaWQgc29tZSB0cm91YmxlcyBwb2ludGVkIG91dCBieSBSb2IgUmljaGFyZHMKCk1vbiBKdW4gMjggMTE6MjU6MzEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5tNDogYXBwbGllZCBjaGFuZ2VzIHN1Z2dlc3RlZCBieSBNaWtlIEhvbW1leSwgcmVtb3ZlCgkgIGxpYnhtbDEgc3VwcG9ydCBhbmQgdXNlIENQUEZMQUdTIGluc3RlYWQgb2YgQ0ZMQUdTCgpTdW4gSnVuIDI3IDE0OjE3OjE1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogYW5vdGhlciwgbW9yZSAnZXhwZXJpbWVudGFsJyBmZWF0dXJlIHRvIAoJICBnZXQgY29tcGlsZXIgb3B0aW1pemF0aW9uIGJhc2VkIG9uIGdjYyBydW50aW1lIHByb2ZpbGluZwoKU3VuIEp1biAyNyAxNDowMjozNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZWxmZ2NjaGFjay5oIGRvYy9lbGZnY2NoYWNrLnhzbCBsaWJ4bWwuaDogaGFjayBiYXNlZCBvbiBBcmphbiB2YW4gZGUKCSAgVmVuIHN1Z2dlc3Rpb24gdG8gcmVkdWNlIEVMRiBmb290cHJpbnQgYW5kIGdlbmVyYXRlZCBjb2RlLiBCYXNlZCBvbgoJICBhbGlhc2luZyBvZiBsaWJyYXJpZXMgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgZGlyZWN0IGNhbGwgaW5zdGVhZCBvZgoJICBpbmRpcmVjdCBvbmVzCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL01ha2VmaWxlLmFtIGRvYy9hcGlidWlsZC5weTogYWRkZWQgYXV0b21hdGljCgkgIGdlbmVyYXRpb24gb2YgZWxmZ2NjaGFjay5oIGJhc2VkIG9uIHRoZSBBUEkgZGVzY3JpcHRpb24sIGV4dGVuZGVkCgkgIHRoZSBBUEkgZGVzY3JpcHRpb24gdG8gc2hvdyB0aGUgY29uZGl0aW9uYWxzIGNvbmZpZ3VyYXRpb24gZmxhZ3MKCSAgcmVxdWlyZWQgZm9yIHN5bWJvbHMuCgkqIG5hbm9odHRwLmMgcGFyc2VyLmMgeG1sc2F2ZS5jIGluY2x1ZGUvbGlieG1sLyouaDogbG90IG9mIGNsZWFudXAKCSogZG9jLyo6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzLgoKU3VuIEp1biAyNyAxMDowMjoyOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHJlZ3Jlc3Npb25zLnB5LCByZWdyZXNzaW9ucy54bWw6IG5ldyBmaWxlcyBmb3IgcnVubmluZwoJICByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIFB5dGhvbi4gIE5vdCB5ZXQgY29tcGxldGUsIGJ1dAoJICBzaG91bGQgcHJvdmlkZSBnb29kIHRlc3RpbmcgdW5kZXIgYm90aCBMaW51eCBhbmQgV2luZG93cy4KCSogdGVzdEhUTUwuYywgdGVzdFNBWC5jLCB4bWxsaW50LmM6IGNoYW5nZWQgdGhlICdmb3BlbicgdXNlZAoJICBmb3IgLS1wdXNoIHRlc3RpbmcgdG8gaW5jbHVkZSB0aGUgJ3JiJyBwYXJhbSB3aGVuIGNvbXBpbGVkCgkgIHVuZGVyIFdpbmRvd3MuCgpGcmkgSnVuIDI1IDEzOjM4OjU3IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdXJpLmM6IGZpeGVkIGEgcHJvYmxlbSB3aGVuIGJhc2UgcGF0aCB3YXMgIi4veHh4IgoJKiByZXN1bHQvWEluY2x1ZGUvKjogNSB0ZXN0IHJlc3VsdHMgY2hhbmdlZCBieSBhYm92ZS4KCSogTWFrZWZpbGUuYW06IGZpeGVkIGEgY291cGxlIG9mIHNwb3RzIHdoZXJlIGEgbmV3CgkgIHJlc3VsdCBmaWxlIHVzZWQgZGlmZmVyZW50IGZsYWdzIHRoYXQgdGhlIHRlc3Rpbmcgb25lLgoKVGh1IEp1biAyNCAxNjoyNzo0NCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IHN1cHByZXNzZWQgd2FybmluZ3MgZnJvbSB3aXRoaW4geG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzCgkgIChidWcgMTQ0NjQ0KQoJKiBkb2MvZXhhbXBsZXMvdGVzdFdyaXRlci5jOiBjb3JyZWN0ZWQgdHlwbyBpbiBjb21tZW50IGZvciBJU08tODg1OS0xCgkgIChidWcgMTQ0MjQ1KQoKVGh1IEp1biAyNCAxMDoxNzozMSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHZhbGlkLmM6IGltcGxlbWVudGVkIGJ1Z2ZpeCBmcm9tIE1hc3NpbW8gTW9yYXJhIGZvciBEVEQKCSAgZHVtcGluZyBwcm9ibGVtLgoJKiB0ZXN0L3ZhbGlkL3QxMC54bWwsIHJlc3VsdC92YWxpZC90MTAuKjogYWRkZWQgcmVncmVzc2lvbgoJICBmb3IgYWJvdmUKCSogY29uZmlndXJlLmluOiBzbWFsbCBjaGFuZ2UgZm9yIG15IHByb2ZpbGUgc2V0dGluZ3MKCldlZCBKdW4gMjMgMjA6MTg6MTkgTURUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2cuMQoJRG9jcyBwYXRjaCBmcm9tIFZpbGxlIFNreXR0YSwgYnVnemlsbGEgIzE0NDg0MQoKU2F0IEp1biAxOSAxODozNDoxMSBNRFQgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sLCB4bWxsaW50Lmh0bWwsIHhtbGxpbnQuMQoJdXBkYXRlIG1hbiBwYWdlIHRvIHJlZmxlY3QgV2lsbGlhbSdzIG5ld2x5IGRpc2NpcGxpbmVkIHJldHVybgoJY29kZSBtb2pvCgpUaHUgSnVuIDE3IDAwOjUxOjU1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMvaW8yLmMgZG9jL2V4YW1wbGVzL3BhcnNlNC5jOiBmaXhpbmcgYSBjb3VwbGUgb2YKCSAgY29tcGlsYXRpb24gZXJyb3JzIHdoZW4gY29uZmlndXJlZCB3aXRoIC0td2l0aC1taW5pbXVtCgpXZWQgSnVuIDE2IDE2OjA3OjEwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gU3RlZmFubyBEZWJlbmVkZXR0aSB0byByZWdpc3RlcgoJICBuYW1lc3BhY2VzIGluIHRoZSBkZWJ1ZyBzaGVsbAoKTW9uIEp1biAxNCAyMTo1NjozMSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeCBmcm9tIFN0ZXZlIEJhbGwgYW5kIHVwZGF0ZSBvZiB0aGUgY29tbWVudC4KCSogTWFrZWZpbGUuYW0gcmVzdWx0L2Vycm9ycy8qLnN0cjogV2lsbGlhbSBwb2ludGVkIG91dCB0aGF0IAoJICB0aGUgc3RyZWFtaW5nIGVycm9yIGNoZWNraW5nIHBhcnQgd2Fzbid0IHN0cmVhbWluZywgZml4aW5nCgpNb24gSnVuIDE0IDE0OjExOjUyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHBhdGNoIGZyb20gSWdvciBmb3IgdGhlIGRlZmF1bHQgY2F0YWxvZyBwYXRoIG9uIFdpbmRvd3MKClNhdCBKdW4gMTIgMDk6MDM6NTcgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBjb25maWd1cmUuaW46IGFwcGFyZW50bHkgd2Fzbid0IHVwZGF0ZWQgbGFzdCB0aW1lCgpUaHUgSnVuIDEwIDIwOjU3OjQ4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY29uZmlndXJlLmluLCB4bWxtZW1vcnkuYywgZ2xvYmFscy5jOiBmaXhlZCBwcm9ibGVtIHdoZW4KCSAgY29uZmlndXJpbmcgdXNpbmcgLS13aXRoLXRocmVhZC1hbGxvYwoKV2VkIEp1biAgOSAxNjozMToyNCBDRVNUIDIwMDQgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qcyB3aW4zMi9NYWtlZmlsZS4qIG1pbm9yIGNoYW5nZXMgZm9yIHRoZSBuZXcKCSAgbGF5b3V0IG9mIHRoZSBXaW5kb3dzIGJpbmFyeSBwYWNrYWdlCgpUdWUgSnVuICA4IDE5OjUwOjI1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYXBwbGllZCBhbm90aGVyIHBhdGNoCgkgIGZyb20gS2FzaW1pZXIgQnVjaGNpayBmb3IgU2NoZW1hIENvbXBvbmVudCBDb25zdHJhaW50cwoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCB0aGUgcmVncmVzc2lvbiB0ZXN0cwoKVHVlIEp1biAgOCAyMToyNzowMyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbGxpbnQuYzogZml4ZWQgbWlzc2luZyBlcnJvciByZXR1cm4gY29kZSBmb3Igc2NoZW1hCgkgIHZhbGlkYXRpb24gKGJ1ZyAxNDM4ODApLCBhbHNvIGNoYW5nZWQgb3ZlciB0byBhbiBlbnVtIGZvcgoJICBkZWZpbmluZyB0aGUgZXJyb3IgcmV0dXJuIGNvZGVzIGZvciBhbGwgY29uZGl0aW9ucy4KClR1ZSBKdW4gIDggMTQ6MDE6MTQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBmaXhlZCBhIHNlcmlvdXMKCSAgcHJvYmxlbSB3aGVuIHN1YnN0aXR1aW5nIGVudGl0aWVzIHVzaW5nIHRoZSBSZWFkZXIsIHRoZSBlbnRpdGllcwoJICBjb250ZW50IG1pZ2h0IGJlIGZyZWVkIGFuZCBpZiByZXJlZmVyZW5jZWQgd291bGQgY3Jhc2gKCSogTWFrZWZpbGUuYW0gdGVzdC8qIHJlc3VsdC8qOiBhZGRlZCBhIG5ldyB0ZXN0IGNhc2UgYW5kIGEgbmV3CgkgIHRlc3Qgb3BlcmF0aW9uIGZvciB0aGUgcmVhZGVyIHdpdGggc3Vic3RpdHV0aW9uIG9mIGVudGl0aWVzLgoKVHVlIEp1biAgOCAxMjoxNDoxNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3htbElPLmg6CgkgIGFwcGxpZWQgcGF0Y2ggZnJvbSBSb2IgUmljaGFyZHMgZm9yIHRoZSBwZXIgdGhyZWFkIEkvTyBtYXBwaW5ncwoKVHVlIEp1biAgOCAwOTo1ODozMSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IHNvbWUgZnVydGhlciBlbmhhbmNlbWVudCB0byB0YWtlIGNhcmUgb2YKCSAgeG1sOmJhc2UgZm9yIFhQb2ludGVyIGVsZW1lbnRzIChidWcgMTQzODg2KS4gIEFsc28gZml4ZWQKCSAgYSBwcm9ibGVtIHdoZW4geG1sOmJhc2Ugd2FzIGFscmVhZHkgc3BlY2lmaWVkIG9uIGFuCgkgIFhJbmNsdWRlJ2QgZWxlbWVudC4KCk1vbiBKdW4gIDcgMjI6MTQ6NTggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiByZWxheG5nLmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIGludGVybmFsIGNsZWFudXAgb2YgPERJVj4gZWxlbWVudAoJICAoYnVnIDE0MzczOCkuCgpNb24gSnVuICA3IDE2OjU3OjQzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdXJpLmMsIGluY2x1ZGUvbGlieG1sL3VyaS5oOiBhZGRlZCBhIG5ldyByb3V0aW5lCgkgIHhtbEJ1aWxkUmVsYXRpdmVVUkkgbmVlZGVkIGZvciBlbmhhbmNlbWVudCBvZiB4aW5jbHVkZS5jCgkqIHhpbmNsdWRlLmM6IGNoYW5nZWQgaGFuZGxpbmcgb2YgeG1sOmJhc2UgKGJ1ZyAxMzU4NjQpCgkqIHJlc3VsdC9YSW5jbHVkZS8qOiByZXN1bHRzIG9mIDUgdGVzdHMgY2hhbmdlZCBhcyBhIHJlc3VsdAoJICBvZiB0aGUgYWJvdmUgY2hhbmdlCgpGcmkgSnVuICA0IDExOjI3OjM3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBhIGJ1bmNoIG9mIHRlc3RzIGZyb20KCSAgS2FzaW1pZXIgQnVjaGNpayBwb3N0ZWQgb24gTWF5IDExCgpUaHUgSnVuICAzIDE3OjU4OjI1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IG5ldyBwYXRjaCBmcm9tICBLYXNpbWllciBCdWNoY2lrIGZvciBwcm9jZXNzQ29udGVudHMKCSAgb2Ygd2lsZGNhcmRzIGF0dHJpYnV0ZSBoYW5kbGluZwoJKiB0ZXN0L3NjaGVtYXMvYW55QXR0ci0qIHJlc3VsdC9zY2hlbWFzL2FueUF0dHItKjogYWRkZWQgc3BlY2lmaWMKCSAgcmVncmVzc2lvbiB0ZXN0cwoKVGh1IEp1biAgMyAxMzoyMDozNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgYnVnIHdoZXJlIGludmFsaWQgY2hhcnJlZnMgbWF5IG5vdCBiZSBkZXRlY3RlZAoJICBzb21ldGltZXMgYXMgcG9pbnRlZCBieSBNb3J1cyBXYWx0ZXIuCgkqIHRlc3QvZXJyb3JzL2NoYXJyZWYxLnhtIHJlc3VsdC9lcnJvcnMvY2hhcnJlZjEueG1sKjogYWRkZWQgdGhlCgkgIHRlc3QgaW4gdGhlIHJlZ3Jlc3Npb24gc3VpdGUuCgpUaHUgSnVuICAzIDE4OjM4OjI3IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jOiBzbWFsbCBjaGFuZ2UgdG8geG1sU2NoZW1hVmFsaWRhdGVBdHRyaWJ1dGVzLAoJICBhbHNvIGNvcnJlY3RlZCB0eXBvIG9uIGVycm9yIGNvZGUgZW51bS4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogY29ycmVjdGVkIHR5cG8gb24gc2NoZW1hIGVycm9yCgkgIGNvZGUgZW51bQoKVGh1IEp1biAgMyAxMDoxMjozOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYzogbWlub3IgY29zbWV0aWMgY2hhbmdlcywgbm8gY2hhbmdlIHRvIGxvZ2ljLgoJKiByZXN1bHQvc2NoZW1hcy9hdHRydXNlXzBfWzEyXS5lcnI6IHJlZ2VuZXJhdGVkCgkqIGdsb2JhbHMuYzogYWRkZWQgYSBuZXdsaW5lIGF0IGVuZCB0byBtYWtlIGdjYyBoYXBweQoKV2VkIEp1biAgMiAyMToxNjoyNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCAKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYXBwbGllZCBhIHBhdGNoIGZyb20gS2FzaW1pZXIgQnVjaGNpawoJICBpbXBsZW1lbnRpbmcgYXR0cmlidXRlIHVzZXMgYW5kIHdpbGRjYXJkcy4KCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQvZml4ZWQgYSBidW5jaCBvZiB0ZXN0cwoKV2VkIEp1biAgMiAxODoxNTo1MSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oOiBhcHBsaWVkIHBhdGNoIGZyb20gCgkgIFJvYiBSaWNoYXJkcyBmb3IgY3VzdG9tIEkvTyBCdWZmZXJDcmVhdGVGaWxlbmFuZSBmaXhlcyBidWcKCSAgIzE0MzM2NgoKV2VkIEp1biAwMiAxNjoyNTozMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBwcmVkaWNhdGUgZXZhbHVhdGlvbiBvbiBhbgoJICBlbXB0eSBub2Rlc2V0IChidWcgMTQzNDA5KQoKV2VkIEp1biAwMiAxMToyNjo0MSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRlc3RTQVguYzogZml4ZWQgcHJvYmxlbSB3aXRoIGF0dHJpYnV0ZSBsaXN0aW5nIChidWcgMTQyNjc0KQoJICBhbmQgYWRkZWQgbWFjcm8gTElCWE1MX1RFU1RfVkVSU0lPTiB0byBhc3N1cmUgeG1sSW5pdFBhcnNlcgoJICBnZXRzIGNhbGxlZCAoYnVnIDE0MjY4NikKClNhdCBNYXkgMjkgMjE6MzU6NTIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3Qvc2NoZW1hcy9kYXRlXzAueG1sIHhtbHNjaGVtYXN0eXBlcy5jOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbQoJICBDaGFybGVzIEJvemVtYW4gZml4aW5nIGEgc2lkZSBlZmZlY3QgaW4gZGF0ZSBoYW5kbGluZwoKVGh1IE1heSAyNyAxOTo0Nzo0OCBNRFQgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbCBmaXggbGFjayBvZiBjYXN0IGluIFhwYXRoIGV4YW1wbGUKCSogZG9jL3R1dG9yaWFsLyouaHRtbCwgeG1sdHV0b3JpYWwucGRmIHJlYnVpbGQgaHRtbCwgcGRmCgoyMDA0LTA1LTI1ICBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jOiBmaXhlZCBjMTRuIGJ1ZyB3aXRoIHNlcmlhbGl6aW5nIGF0dHJpYnV0ZSBuYW1lc3BhY2VzCgpNb24gTWF5IDI0IDA4OjIyOjQ4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZml4ZWQgdG8gYWxsb3cgJysnIGluIGV4cG9uZW50IG9mIG51bWJlcgoJICAoYnVnIDE0MzAwNSkKCSogU0FYMi5jOiBmaXhlZCB0eXBvIGluIGxhc3QgY29tbWl0CgpTYXQgTWF5IDIyIDA5OjA4OjI0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogU0FYMi5jOiBza2lwcGVkIGNhbGwgdG8geG1sVmFsaWRhdGVOQ05hbWUgd2hlbiBjb21waWxpbmcKCSAgLS13aXRoLW1pbmltdW0gKGJ1ZyAxNDI5MTcpCgpUdWUgTWF5IDE4IDA2OjQ4OjAwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHJldmVydGVkIHRoZSBicm9rZW4gY2hhbmdlLgoKTW9uIE1heSAxNyAyMzowNzoxNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcyBmb3IgMi42LjEwCgpNb24gTWF5IDE3IDA1OjUyOjAzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gOiByZWxlYXNpbmcgMi42LjEwCgpTdW4gTWF5IDE2IDIzOjEyOjM1IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGF2b2lkIHJldHVybmluZyBkZWZhdWx0IG5hbWVzcGFjZSB3aGVuIHNlYXJjaGluZwoJICBmcm9tIGFuIGF0dHJpYnV0ZQoJKiBlbnRpdGllcy5jIHhtbHdyaXRlci5jOiByZXZlcnNlIHhtbEVuY29kZVNwZWNpYWxDaGFycygpIGJlaGF2aW91cgoJICBiYWNrIHRvIGVzY2FwaW5nICIgc2luY2UgdGhlIG5vcm1hbCBzZXJpYWxpemF0aW9uIHJvdXRpbmVzIGRvIG5vdAoJICB1c2UgaXQgYW55bW9yZSwgc2hvdWxkIGNsb3NlIGJ1ZyAjMTM0NDc3IC4gVHJpZWQgdG8gbWFrZSAKCSAgdGhlIHdyaXRlciBhdm9pZCBpdCB0b28gYnV0IGl0IGRpZG4ndCB3b3JrLgoKU3VuIE1heSAxNiAwMTowNzoxNiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL0NoYW5nZUxvZy5hd2sgZG9jL0NoYW5nZUxvZy54c2w6IGZpeGVkIGVzY2FwaW5nCgkgIGhhbmRsaW5nIGFuZCBhZGRlZCBkaXJlY3QgbGlua3MgdG8gYnVnemlsbGEgcmVwb3J0IGZvcgoJICBidWcgbnVtYmVycy4KClN1biBNYXkgMTYgMTE6MTE6MTMgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlcnJvci5jOiBtb2RpZmllZCB0byBhc3N1cmUgcHJvcGVyIHVzZXIgZGF0YSBpcyBzZW50IHRvCgkgIHN0cnVjdHVyZWQgZXJyb3Igcm91dGluZSAoYnVnIDE0MjU5OCkKClN1biBNYXkgMTYgMDM6MTg6NTIgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogYSBjb3VwbGUgb2YgbGFyZ2Ugc3RhdGljIHZhcmlhYmxlIHdoaWNoIHNob3VsZCByZWFsbHkKCSAgbm90IGJlIGRlY2xhcmVkIGFzIHN1Y2ggY2x1dHRlcmVkIHRoZSAuYnNzIHNlY3Rpb24uCgpTdW4gTWF5IDE2IDAzOjA2OjMxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvQ2hhbmdlTG9nLmF3azogZml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMgd2hlbiBwYXJzaW5nCgkgIGxpYnhzbHQgQ2hhbmdlTG9nCgpTYXQgTWF5IDE1IDIwOjE0OjIxIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvQ2hhbmdlTG9nLmF3ayBkb2MvQ2hhbmdlTG9nLnhzbDogZmlyc3Qgc3RlcHMgb2YgYSBnb29kCgkgIENoYW5nZUxvZyBwYWdlIGdlbmVyYXRpb24uIFRoZSBhd2sgc2hvdWRsIGVzY2FwZSBjaGFyYWN0ZXJzCgkgIG5vdCBva2F5IGluIFhNTCBhbmQgdGhlIHhzbHQgc2hvdWxkIG1ha2UgbGlua3MgdG8gZnVuY3Rpb25zCgkgIG9yIHZhcmlhYmxlcyBvciBidWcgcmVwb3J0ZWQgaW4gdGhlIGVudHJpZXMuCgpTYXQgTWF5IDE1IDE0OjU3OjQwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzYXZlLmMgaW5jbHVkZS9saWJ4bWwveG1sc2F2ZS5oOiBzdGFydCBhZGRpbmcgQVBJIGZvciAKCSAgZXNjYXBpbmcgY3VzdG9taXphdGlvbi4KClNhdCBNYXkgMTUgMTI6Mzg6MTcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNhdmUuYzogbW9yZSB4bWxTYXZlIGNsZWFudXAsIG9wdGltaXphdGlvbiBhbmQgcmVmYWN0b3JpbmcKCkZyaSBNYXkgMTQgMTc6NTE6NDggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmMgeG1sc2F2ZS5jOiB0aGlyZCBwYXNzIGF0IHRoZSBlc2NhcGluZyByZWZhY3RvcmluZy4KCkZyaSBNYXkgMTQgMTI6Mzc6MjQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYzogZW5oYW5jZWQgdGhlIGVuaGFuY2VtZW50LCBmaXhlZCBhbm90aGVyIGNvdXBsZSBvZgoJICBzcGVjaWFsIGNhc2VzLgoKRnJpIE1heSAxNCAxMTo0ODozMyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBzbWFsbCBlbmhhbmNlbWVudCB0byBkdGQgaGFuZGxpbmcgb2YgKGE/KSsgKGJ1ZyAxNDI0ODcpCgpUaHUgTWF5IDEzIDIzOjE5OjAwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jIHhtbHNhdmUuYyBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBzZWNvbmQgcGFzcyBvbiBlc2NhcGluZwoJICBoYW5kbGluZywgc3RhcnQgdG8gbG9va3MgYmV0dGVyLCBuZWVkIHRvIGJlIGNvbXBsZXRlZCBhbmQgYWRkZWQKCSAgZGlyZWN0bHkgYXQgdGhlIHNhdmluZyBjb250ZXh0IGxldmVsLgoKVGh1IE1heSAxMyAxMDozMToyOCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYyB4bWxzYXZlLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogZmlyc3QgcGFzcyBhdCByZWZhY3RvcmluZwoJICB0aGUgZXNjYXBlIG9uIHNhdmUgcm91dGluZXMgZm9yIGJldHRlciBwZXJmb3JtYW5jZXMgKGxlc3MgbWFsbG9jKQoJICBhbmQgbW9yZSBmbGV4aWJpbGl0eSB1c2luZyB0aGUgbmV3IHNhdmluZyBjb250ZXh0LiBQcmVsaW1pbmFyeQoJICB3b3JrLCBpbnRlcmZhY2Ugd2lsbCBjaGFuZ2UuCgpXZWQgTWF5IDEyIDIyOjM0OjAzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jOiBhZGRlZCBjb2RlIGluIHhtbFNjaGVtYUJ1aWxkQUNvbnRlbnRNb2RlbCB0byBoYW5kbGUKCSAgZWxlbWVudCByZWZlcmVuY2Ugd2l0aGluIHRoZSB4czphbGwgY29uc3RydWN0IChidWcgMTM5ODk3KQoKV2VkIE1heSAxMiAxNzoyNzoxOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGEgbGl0dGxlIGZ1cnRoZXIgZml4aW5nIG9mIGZhbGxiYWNrIHByb2Nlc3NpbmcsIHRoaXMKCSAgdGltZSBmb3IgZmFsbGJhY2sgd2l0aCBjaGlsZHJlbiAoYnVnIDEzOTUyMCkuCgpXZWQgTWF5IDEyIDA4OjIxOjMzIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jOiBhZGRlZCBjb2RlIGluIHhtbFNjaGVtYUJ1aWxkQ29udGVudE1vZGVsIHRvCgkgIGFsbG93IHJlZiBpbiBncm91cCBkZWZpbml0aW9uIChidWcgMTM0NDExKS4gIEFsc28gZml4ZWQKCSAgbWlzYyBjb21waWxhdGlvbiB3YXJuaW5nIG1lc3NhZ2VzLgoJKiByZXN1bHQvc2NoZW1hL2dyb3VwMF8wXzAsIHJlc3VsdC9zY2hlbWEvZ3JvdXAwXzBfMC5lcnI6CgkgIHJlZ2VuZXJhdGVkIChub3cgbm8gZXJyb3IgcmVwb3J0ZWQpLgoKVHVlIE1heSAxMSAxMTo1NTo1OSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogZml4IHRvIHRoZSBmaXggZm9yICMxNDE4NjQgZnJvbSBQYXVsIEVsc2V0aCAgCgkqIEhUTUxwYXJzZXIuYyByZXN1bHQvSFRNTC9kb2MzLmh0bTogYXBwbHkgZml4IGZyb20gRGF2aWQgR2F0d29vZCBmb3IKCSAgIzE0MTE5NSBhYm91dCB0ZXh0IGJldHdlZW4gY29tbWVudHMuCgpUdWUgTWF5IDExIDIzOjA0OjQ3IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jLCBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmgsCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IEFwcGxpZWQgcGF0Y2hlcyBzdXBwbGllZCBieQoJICBLYXNpbWllciBCdWNoY2lrLgoJKiB0ZXN0L3NjaGVtYXMvcG8xXzAueG1sLCB0ZXN0L3NjaGVtYXMvcG8xXzAueHNkOgoJICBjaGFuZ2VkIHRlc3QgdG8gYWNjb3VudCBmb3IgYWJvdmUgcGF0Y2guCgpUdWUgTWF5IDExIDA5OjA2OjUzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vdGVzdHMvdHN0TGFzdEVycm9yLnB5OiBiZXR0ZXIgcG9ydGFiaWxpdHkgZml4IGZvciBmKCphcmdzKSwKCSAgdXNlIGFwcGx5KGYsIGFyZ3MpIGFzIFN0ZXBoYW5lIEJpZG91bCBzdWdnZXN0ZWQKCk1vbiBNYXkgMTAgMTU6NDk6MjIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxyZWdleHAuYzogZW5oYW5jZWQgeG1sUmVnU3RhdGVBZGRUcmFucyB0byBjaGVjayBpZiB0cmFuc2l0aW9uCgkgIGlzIGFscmVhZHkgcHJlc2VudCBhbmQsIGlmIHNvLCB0byBpZ25vcmUgdGhlIHJlcXVlc3QgdG8gYWRkIGl0LgoJICBUaGlzIGhhcyBhIHZlcnkgZHJhbWF0aWMgZWZmZWN0IG9uIG1lbW9yeSByZXF1aXJlbWVudHMgYXMgd2VsbAoJICBhcyBlZmZpY2llbmN5LiAgSXQgYWxzbyBmaXhlcyBidWcgMTQxNzYyLgoKU3VuIE1heSAgOSAyMDo0MDo1OSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy90c3RMYXN0RXJyb3IucHk6CgkgIGFwcGxpZWQgcGF0Y2ggZnJvbSBFZCBEYXZpcyB0byBhbGxvdyAibWFrZSB0ZXN0cyIgdG8gd29yawoJICB3aXRoIFB5dGhvbiAxLjUKClN1biBNYXkgIDkgMTk6NDY6MTMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNhdmUuYzogYXBwbHkgZml4IGZvciBYSFRNTDEgZm9ybWF0aW5nIGZyb20gTmljayBXZWxsbmhvZmVyCgkgIGZpeGVzIGJ1ZyAjMTQxMjY2CgkqIHRlc3QveGh0bWxjb21wIHJlc3VsdC8veGh0bWxjb21wKjogYWRkZWQgdGhlIHNwZWNpZmljIHJlZ3Jlc3Npb24KCSAgdGVzdAoKU3VuIE1heSAgOSAxNDowNzoyMSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGZpeCBmb3IgYSBwZWRhbnRpYyBtYWtlIGNoZWNrIHdpdGhvdXQgbWFrZSBhbGwgcmVxdWVzdAoKU2F0IE1heSAgOCAyMjo1NjoyMiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmMgeG1sSU8uYzogZml4aW5nIHNvbWUgcHJvYmxlbXMgaW4gVVJJIHVuZXNjYXBpbmcKCSAgYW5kIG91dHB1dCBidWZmZXIgb3BlbmluZywgdGhpcyBzaG91bGQgZml4ICMxNDE4NjQKCkZyaSBNYXkgIDcgMjI6MzE6NTQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogZml4ZXMgdGhlIHVzZSBvZiAnbGlzdCcgYXMgYSBwYXJhbWV0ZXIKCSogeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBhZGRlZCB4bWxQb3BJbnB1dENhbGxiYWNrIGZvcgoJICBNYXR0IFNlcmdlYW50CgpUaHUgTWF5ICA2IDIxOjE0OjM4IFBEVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1scmVnZXhwLmM6IGVuaGFuY2VkIHRoZSBoYW5kbGluZyBvZiBzdWJleHByZXNzaW9uIHJhbmdlcwoJICB3aGljaCBoYXZlIGEgbWluT2NjdXJzIG9mIDAgKGJ1ZyAxNDA0NzggYWdhaW4pOyBjbGVhbmVkIHVwCgkgIGNvbW1lbnRzIHRocm91Z2hvdXQgdGhlIG1vZHVsZS4KClR1ZSBNYXkgIDQgMDA6NTI6MTYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkaW5nIGEgLS1tYXhtZW0gb3B0aW9uIHRvIGNoZWNrIG1lbW9yeSB1c2VkLgoKU2F0IE1heSAgMSAwMTowODo0NCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jIHhtbHNhdmUuYyBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYzogRml4ZWQKCSAgYnVnICMxNDE1MjkgaS5lLiB2YXJpb3VzIHByb2JsZW1zIHdoZW4gYnVpbGRpbmcgd2l0aCAtLXdpdGhvdXQtaHRtbAoKRnJpIEFwciAzMCAxODoxMjozMSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jIHhtbHJlYWRlci5jOiBmaXhpbmcgYnVnICMxNDEzODQgd2hlcmUgdGhlIHJlYWRlciBkaWRuJ3QKCSAgY2FsbCB0aGUgZGVyZWdpc3RlcmluZyBmdW5jdGlvbnMuIEFsc28gYWRkZWQgdGhlIGNoZWNrIHRvCgkgIHhtbGxpbnQgLS1zdHJlYW0gLS1jaGtyZWdpc3RlciAuCgpGcmkgQXByIDMwIDA4OjU3OjQ3IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBhcHBsaWVkIGEgc2Vjb25kIHBhdGNoIGZyb20gTWFyayBWYWtvYyBmb3IKCSAgcmVncmVzc2lvbiB0ZXN0cyBvbiBXaW5kb3dzCgpUaHUgQXByIDI5IDIxOjQ3OjIzIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogbmV2ZXIgY29tbWl0IHdpdGhvdXQgcnVubmluZyBtYWtlIHRlc3RzIGZpcnN0ICEKClRodSBBcHIgMjkgMjA6MTU6MjAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXggYSBuYXN0eSBwcm9ibGVtIHdpdGggcmVhZGluZyBvdmVyIHRoZSBlbmQKCSogeG1sc2F2ZS5jOiBmaXggYSByZXBvcnRlZCBtZW1vcnkgbGVhayBhcHBhcmVudGx5CgpUaHUgQXByIDI5IDE3OjA1OjAwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgZm9yIHJlZ3Jlc3Npb24gdGVzdHMKCSAgb24gV2luZG93cy4KCSogeHBhdGguYzogdGhlIE5hTiBwcm9ibGVtIGFsc28gc2hvd3MgdXAgb24gQm9ybGFuZAoKTW9uIEFwciAyNiAyMzozNzoxMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHJlZ2V4cC5jOiBlbmhhbmNlZCB4bWxGQVJlZ0V4ZWMgcmFuZ2UgZXZhbHVhdGlvbiBmb3IgbWluCgkgIG9jY3VycyAwIHByb2JsZW1zIC0gZml4ZXMgYnVnIDE0MDQ3OC4KClRodSBBcHIgMjIgMDk6MTI6NDcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJuZ3BhcnNlci5jOiB0aW55IHBhdGggZml4ZXMgdGhlICJ4bWxDb252ZXJ0Q1JOR0ZpbGUiIGZ1bmN0aW9uIG5hbWUKCSAgZnJvbSBLYXNpbWllciBCdWNoY2lrCgkqIHhtbHNjaGVtYXMuYzogcmVjdXJzaXZlIHhzOmV4dGVuc2lvbiBmaXggZnJvbSB0YWloZWkgZ29pCgpXZWQgQXByIDIxIDAwOjE5OjI5IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHNtYWxsIGJ1ZmZlciByZXNpemluZyBpbXByb3ZlbWVudCBmcm9tIE1vcnRlbiBXZWxpbmRlcgoJICBjbG9zZXMgIzE0MDYyOQoKVHVlIEFwciAyMCAyMzo0MDoxNCBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogbGFzdCB2ZXJzaW9uIG9mIHRoZSBmaXggZm9yIE1TQyB2ZXJzaW9uIDEyMDAKClR1ZSBBcHIgMjAgMTk6NDA6MzcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBraWxsaW5nIHRoZSBzdHJuY21wIHZzLiBtZW1jbXAgY29udHJvdmVyc3kgYW5kICMxNDA1OTMKClR1ZSBBcHIgMjAgMTM6Mjc6MDYgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL1NBWDIuaDogS2FzaW1pZXIgQnVjaGNpayBwb2ludGVkIG91dCBzb21lIAoJICBpbmV4aXN0ZW50IGZ1bmN0aW9ucywgY2xlYW5lZCB0aGVtIG91dC4KClR1ZSBBcHIgMjAgMTE6NDI6NTAgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmM6IEpvaG5zb24gQ2FtZXJvbiBwb2ludGVkIG91dCB0aGF0CgkgIGluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYygpIHdhcyByZWFsbHkgd3JvbmcuCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiB4bWxUZXh0UmVhZGVyTW9kZSBlbnVtCgkgIG11c3QgYmUgbWFkZSBwdWJsaWMsIGFkZGVkIHNvbWUgbWlzc2luZyBjb21tZW50cyBvbiB0aGUgWE1MUmVhZGVyCgkgIGhlYWRlci4KCSogYzE0bi5jOiBBbGV4c2V5IGZpeGVkIEMxNE4gYnVnIHdpdGggcHJvY2Vzc2luZyBuYW1lc3BhY2VzCgkgIGZyb20gYXR0cmlidXRlcwoKTW9uIEFwciAxOSAyMzoyNzo0NiBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgYSBzdHVwaWQgKCkgZXJyb3IgKyBNYXJrIG5hbWUuCgpTdW4gQXByIDE4IDIzOjQ1OjQ2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjYuOSByZWxlYXNlCgkqIGRvYy8qIE5ld3M6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKClN1biBBcHIgMTggMjI6NTE6NDMgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHJlbGF4ZWQgaWQoKSB0byBub3QgY2hlY2sgdGFodCB0aGUgbmFtZShzKSBwYXNzZWQKCSAgYXJlIGFjdHVhbGx5IE5DTmFtZSwgZGVjaWRlZCB0aGlzIGluIGFncmVlbWVudCB3aXRoIEFsZWtzZXkgU2FuaW4KCSAgc2luY2UgZXhpc3Rpbmcgc3BlY3MgbGlrZSBWaXNhM0QgYnJva2UgdGhhdCBjb25mb3JtYW5jZSBjaGVja2luZwoJICBhbmQgb3RoZXIgdG9vbHMgc2VlbXMgdG8gbm90IGltcGxlbWVudCBpdCBzaWdoLi4uCgkqIFNBWDIuYzogY2hlY2sgYXR0cmlidXRlIGRlY2xzIGZvciB4bWw6aWQgYW5kIHRoZSB2YWx1ZSBpcyBhbgoJICBOQ05hbWUuCgkqIHRlc3QveG1saWQvaWRfZXJyKiByZXN1bHQveG1saWQvaWRfZXJyKjogYWRkZWQgZXJyb3IgdGVzdGluZwoKU3VuIEFwciAxOCAyMTo0NjoxNyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogd29yayBhcm91bmQgTWljcm9zb2Z0IGNvbXBpbGVyIE5hTiBidWcgcmFpc2UgcmVwb3J0ZWQKCSAgYnkgTWFyayBWYWtvYwoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBmaXhlZCBhIHJlY3VzaXZlIGV4dGVudGlvbiBzY2hlbWFzCgkgIGNvbXBpbGF0aW9uIGVycm9yIHJhaXNlZCBieSB0YWloZWkgZ29pCgpTdW4gQXByIDE4IDE2OjU3OjAyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjoga2VlcCB0aGUgQ2hhbmdlTG9nIGNvbXByZXNzZWQgCgkqIHhtbHJlYWRlci5jOiBmaXggYSBzZWdmYXVsdCB3aGVuIHVzaW5nIENsb3NlKCkKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXI4LnB5OiB0ZXN0IGZvcgoJICB0aGUgQ2xvc2UoKSByZWFkZXIgQVBJLgoKU2F0IEFwciAxNyAyMjo0MjoxMyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYywgeG1sd3JpdGVyLmMsIGRvYy9leGFtcGxlcy9wYXJzZTQuYywKCSAgZG9jL2V4YW1wbGVzL2lvMi5jOiBtaW5vciB3YXJuaW5nIGNsZWFudXAgKG5vIGNoYW5nZSB0byBsb2dpYykKCSogeGluY2x1ZGU6IGZpeGVkIHJldHVybiB2YWx1ZSBmb3IgaW50ZXJuYWwgZnVuY3Rpb24KCSAgeG1sWEluY2x1ZGVMb2FkRmFsbGJhY2sgKG5vdyBhbHdheXMgMCBvciAtMSkKClNhdCBBcHIgMTcgMjE6MzI6MzIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB2YWxpZC5jOiBzbWFsbCBlbmhhbmNlbWVudCB0byBmaXggYnVnIDEzOTc5MQoKRnJpIEFwciAxNiAxODo0NDo0NyBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBhcHBsaWVkIHBhdGNoZXMgZnJvbSBLYXNpbWllciBCdWNoY2lrCgkgIGZvciB0aGUgYXR0cmlidXRlIHVzZSBzdXBwb3J0CgkqIHRlc3Qvc2NoZW1hcy9hdHRydXNlKiByZXN1bHQvc2NoZW1hcy9hdHRydXNlKjogYWRkZWQgdGhlCgkgIHRlc3RzIHRvIHRoZSByZWdyZXNzaW9uIHN1aXRlLgoKRnJpIEFwciAxNiAxODoyMjoyNSBDRVNUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2F2ZS5jOiBtb3ZlIHRoZSBUT0RPIGFzIGNvbW1lbnRzIGFzIHRoZSBmdW5jdGlvbiB3aGlsZSBub3QKCSAgZmluaXNoZWQgYXJlIHVzYWJsZSBhcy1pcwoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogcGF0Y2ggZnJvbSBLYXNpbWllciBCdWNoY2lrCgkgIGltcGxlbWVudGluZyB1bmlvbgoJKiB0ZXN0L3NjaGVtYXMvdW5pb25fMF8wLngqIHJlc3VsdC9zY2hlbWFzL3VuaW9uXzBfMCo6IGFkZGVkIGV4YW1wbGUKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBhcHBsaWVkIGZpeCBmcm9tIE1pa2UgSG9tbWV5CgpGcmkgQXByIDE2IDIzOjU4OjQyIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcGFyc2VyLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBkZXRlY3RpbmcgZXh0ZXJuYWwgZHRkCgkgIGVuY29kaW5nIChidWcgMTM1MjI5KS4KCSogTWFrZWZpbGUuYW06IG1pbm9yIGNoYW5nZSB0byB0ZXN0IGxhYmVsCgpGcmkgQXByIDE2IDE2OjA5OjMxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgcHJvYmxlbSBjYXVzaW5nIGR1cGxpY2F0ZSBmYWxsYmFjawoJICBleGVjdXRpb24gKGJ1ZyAxMzk1MjApCgkqIHRlc3QvWEluY2x1ZGUvZG9jcy9mYWxsYmFjazIueG1sIHJlc3VsdC9YSW5jbHVkZS9mYWxsYmFjazIuKjoKCSAgYWRkZWQgdGVzdGNhc2UKCkZyaSBBcHIgIDkgMjM6NDk6MzcgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGluZyB4bWw6aWQgZHJhZnQgc3VwcG9ydAoJKiBNYWtlZmlsZS5hbSB0ZXN0L3htbGlkL2lkX3RzdCogcmVzdWx0L3htbGlkL2lkX3RzdCo6IGFkZGluZwoJICA0IGZpcnN0IHJlZ3Jlc3Npb24gdGVzdHMKCkZyaSBBcHIgIDkgMTE6NTY6MDggQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhpbmcgUmVkIEhhdCBidWcgIzEyMDQ4MiAsIGxpYnhtbDItcHl0aG9uCgkgIHNob3VsZCBkZXBlbmQgb24gdGhlIHZlcnNpb24gb2YgcHl0aG9uIHVzZWQgdG8gY29tcGlsZSBpdC4KCk1vbiBBcHIgIDUgMDk6MDc6MjQgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIEphbWVzIEJ1cnNhLCBmcmFtZXNldCBzaG91bGQKCSAgY2xvc2UgaGVhZC4KCkZyaSBBcHIgIDIgMjI6MDI6MjQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiByZWxheG5nLmM6IGZpeGVkIHByb2JsZW0gaW4geG1sUmVsYXhOR0NvbXBhcmVOYW1lQ2xhc3NlcwoJICB3aGljaCB3YXMgY2F1c2luZyBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHkgdGVzdCAzNTEgdG8gZmFpbC4KCkZyaSBBcHIgIDIgMTc6MDM6NDggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBuYW5vaHR0cC5jOiBpbXBsZW1lbnRlZCBmaXggZm9yIE0kIElJUyByZWRpcmVjdCBwcm92aWRlZAoJICBieSBJYW4gSHVtbWVsCgkqIHJlbGF4bmcuYzogZml4ZWQgcHJvYmxlbSB3aXRoIG5vdEFsbG93ZWQgY29tcGlsYXRpb24KCSAgKGJ1ZyAxMzg3OTMpCgpUaHUgQXByICAxIDIyOjA3OjUyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogZml4IGZvciB4bWxVcmlFc2NhcGUgb24gImh0dHA6Ly91c2VyQHNvbWV3aGVyZS5jb20iCgkgIGZyb20gTWFyayBWYWtvYy4KCjIwMDQtMDQtMDEgIEpvaGFuIERhaGxpbiAgPGpvaGFuQGdub21lLm9yZz4KCgkqIHB5dGhvbi8uY3ZzaWdub3JlOiBBZGQgZ2VuZXJhdGVkIGZpbGVzLCB0byBtYWtlIGN2cyBzaWxlbnQuCgpUaHUgQXByICAxIDEyOjQxOjM2IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IHNtYWxsIHNpZ25lZC1uZXNzIHBhdGNoIGZyb20gU3RldmUgTGl0dGxlCgpXZWQgTWFyIDMxIDE3OjQ3OjI4IENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogcGF0Y2hlZCBhIGJ1ZyBpbiBwYXJzaW5nIHByb2R1Y3Rpb24gMSBhbmQgMiBvZgoJICB4bWxzY2hlbWFzIHJlZ2V4cCB0aGF0IFdpbGxpYW0gcG9pbnRlZCBvdXQgd2hpbGUgd29ya2luZyBvbgoJICAjMTM0MTIwCgkqIHRlc3QvcmVnZXhwL2JyYW5jaCByZXN1bHQvcmVnZXhwL2JyYW5jaDogYWRkZWQgYSBzcGVjaWZpYwoJICByZWdyZXNzaW9uIHRlc3QKCldlZCBNYXIgMzEgMDk6NTA6MzIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgUFlUSE9OUEFUSCB0byBweXRob24gdGVzdHMgZm9yIFNjaGVtYXMKCSAgYW5kIFJlbGF4TkcKCSogdGVzdC94c2R0ZXN0L3hzZHRlc3RzdWl0ZS54bWw6IGFkZGVkIHRlc3RmaWxlIGZvcgoJICBTY2hlbWFzUHl0aG9uVGVzdHMKCk1vbiBNYXIgMjkgMTY6NTY6NDkgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy9leGFtcGxlcy54c2wgZG9jL2V4YW1wbGVzL2luZGV4Lmh0bWw6IGFkZGVkCgkgIGluZm9ybWF0aW9uIGFib3V0IGNvbXBpbGluZyBvbiBVbml4CgpNb24gTWFyIDI5IDE0OjE4OjEyIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGZpeGVzIHRoZSBjb21tZW50cyBmb3IgeG1sQ2F0YWxvZ0R1bXAgYW5kIHhtbER1bXBBQ2F0YWxvZwoJKiBkb2MvKjogcmVidWlsdCB0byB1cGRhdGUKClN1biBNYXIgMjggMTg6MTE6NDEgQ0VTVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNhdmUuYzogb3B0aW1pemUgaW5kZW50YXRpb24gYmFzZWQgb24gdGhlIG5ldyBjb250ZXh0CgpTdW4gTWFyIDI4IDE0OjE3OjEwIENFU1QgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMveHBhdGgyLmMgZG9jL2V4YW1wbGVzL3hwYXRoMi5yZXM6IGhhbmRsZSBhbmQgZXhwbGFpbgoJICBhIHZlcnkgdHJpY2t5IHByb2JsZW0gd2hlbiBtb2RpZnlpbmcgdGhlIHRyZWUgYmFzZWQgb24gYW4gWFBhdGgKCSAgcmVzdWx0IHF1ZXJ5LgoKU2F0IE1hciAyNyAwOTo1NjoxNCBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHJlbGF4bmcuYzogZml4ZWQgcHJvYmxlbSB3aXRoIElTX0NPTVBJTEFCTEUgZmxhZwoJICAoYnVnIDEzMDIxNikKCkZyaSBNYXIgMjYgMTg6Mjg6MzIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBEYXZlIEJlY2tldHQgdG8gY29ycmVjdCBsaW5lIG51bWJlcgoJICBlcnJvcnMgd2hlbiB1c2luZyBwdXNoIHdpdGggQ0RBVEEKCkZyaSBNYXIgMjYgMTQ6NTM6NTggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2V4YW1wbGVzL3hwYXRoMS5jOiBhZGRlZCBhIHRlc3QgdGVtcGxhdGUKCSogZG9jL2V4YW1wbGVzL3hwYXRoMi5jIGRvYy9leGFtcGxlcy94cGF0aDIucmVzIGRvYy9leGFtcGxlcy8qOgoJICBhZGRlZCBhIG5ldyBleGFtcGxlLCBhbmQgbWFrZSB2YWxncmluZCB0YXJnZXQgCgpGcmkgTWFyIDI2IDExOjQ3OjI5IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBseSBmaXggZm9yICMxMzY2OTMKClRodSBNYXIgMjUgMjA6MjE6MDEgTVNUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9leGFtcGxlcy9pbzIuYwoJKiBkb2MvZXhhbXBsZXMvaW8yLnJlcwoJYWRkIHhtbERvY0R1bXBNZW1vcnkgZXhhbXBsZSBpbiByZXNwb25zZSB0byBtYWlsaW5nIGxpc3QgRkFRCgkocmVidWlsdCB4bWwgYW5kIGh0bWwgYWxzbykKClRodSBNYXIgMjUgMTA6MzM6MDUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB0ZXN0WFBhdGguYyB4bWxsaW50LmMgeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGxpZWQKCSAgcGF0Y2ggZnJvbSBNYXJrIFZha29jIGF2b2lkaW5nIHVzaW5nIHhtbFBhcnNlKiBvcHRpb24gYW5kIHVzZQoJICB4bWxSZWFkKiBpbnN0ZWFkCgkqIHdpbjMyL01ha2VmaWxlLmJjYjogcGF0Y2ggdG8gQm9ybGFuZCBDKysgYnVpbGRlciBmcm9tIEVyaWMgWnVyY2hlcgoJICB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHNvbWUgcGF0aG5hbWVzLgoKVHVlIE1hciAyMyAxMjozNTowOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jLyogTmV3czogcHJlcGFyaW5nIDIuNi44IHJlbGVhc2UsIHVwZGF0ZWQgYW5kIHJlYnVpbHQKCSAgdGhlIGRvY3MuCgkqIE1ha2VmaWxlLmFtOiB1c2UgdmFsZ3JpbmcgZnJvIHRoZSBuZXcgUHl0aG9uIGJhc2VkIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBNYXIgMjIgMjA6MDc6MjcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiByZW1vdmUgYSBtZW1vcnkgbGVhayBvbiBzY2hlbWFzIHR5cGUgZmFjZXRzLgoJKiBjaGVjay1yZWxheG5nLXRlc3Qtc3VpdGUucHkgY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlMi5weQoJICBjaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHk6IHJlZHVjZSB2ZXJib3NpdHkKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtOiBpbmNvcnBvcmF0ZWQgdGhlIFB5dGhvbiByZWdyZXNzaW9ucwoJICB0ZXN0cyBmb3IgUmVsYXgtTkcgYW5kIFNjaGVtYXMgRGF0YXR5cGUgdG8gIm1ha2UgdGVzdHMiCgpNb24gTWFyIDIyIDE2OjE2OjE4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHdyaXRlci5jIGluY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oIGRvYy8qIDogYXBwbGllZCBwYXRjaCBmcm9tCgkgIEFsZnJlZCBNaWNrYXV0c2NoIGZvciBiZXR0ZXIgRFREIHN1cHBvcnQuCgkqIFNBWDIuYyBIVE1McGFyc2VyLmMgcGFyc2VyLmMgeGluY2x1ZGUuYyB4bWxsaW50LmMgeG1scmVhZGVyLmMKCSAgeG1sc2NoZW1hcy5jOiBmaXhlZCBidWcgIzEzNzg2NyBpLmUuIGZpeGVkIHByb3Blcmx5IHRoZSB3YXkKCSAgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGhhbmRsZWQgaW4gdGhlIFhNTCBwYXJzZXIgd2hpY2ggaGFkIHRoZQoJICBzaWRlIGVmZmVjdCBvZiByZW1vdmluZyBhIGxvdCBvZiBoYXphcmRvdXMgY3J1ZnQgYWRkZWQgdG8gdHJ5CgkgIHRvIGZpeCB0aGUgcHJvYmxlbXMgYXNzb2NpYXRlZCBhcyB0aGV5IHBvcHBlZCB1cC4KCSogeG1sSU8uYzogRklMRSAqIGNsb3NlIGZpeHVwIGZvciBzdGRlcnIvc3Rkb3V0CgpTdW4gTWFyIDIxIDE5OjE5OjQxIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcmVsYXhuZy5jOiBhZGRlZCBhbiBlcnJvciBtZXNzYWdlIHdoZW4gYW4gZWxlbWVudCBpcyBub3QKCSAgZm91bmQgd2l0aGluIGEgPGNob2ljZT4gKGJ1ZyAxMjYwOTMpCgpTYXQgTWFyIDIwIDIyOjI1OjE4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1scmVnZXhwLmM6IGVuaGFuY2VkIHRoZSBsb2dpYyBvZiBwYXJzaW5nIGNoYXIgZ3JvdXBzIHRvCgkgIGJldHRlciBoYW5kbGUgaW5pdGlhbCBvciBlbmRpbmcgJy0nIChidWcgMTM1OTcyKQoKU2F0IE1hciAyMCAxOToyNjowMyBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHJlbGF4bmcuYzogYWRkZWQgY2hlY2sgZm9yIGV4dGVybmFsIHJlZmVyZW5jZSBpbiAKCSAgeG1sUmVsYXhOR0dldEVsZW1lbnRzIChidWcgMTM3NzE4KQoJKiB0ZXN0L3JlbGF4bmcvcm5nYnVnLTAwMS4qLCByZXN1bHQvcmVsYXhuZy9ybmdidWctMDAxKjogYWRkZWQKCSAgcmVncmVzc2lvbiB0ZXN0IGZvciBhYm92ZQoKV2VkIE1hciAxNyAxNjozNzoyMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIG5hbm9odHRwLmM6IGFkZGVkIGEgY2xvc2UgZm9yIHRoZSBsb2NhbCBmaWxlIGRlc2NyaXB0b3IKCSAgKGJ1ZyAxMzc0NzQpCgpNb24gTWFyIDE1IDE1OjQ2OjU5IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNhdmUuYzogc3dpdGNoZWQgdGhlIG91dHB1dCByb3V0aW5lcyB0byB1c2UgdGhlIG5ldyBjb250ZXh0LgoKTW9uIE1hciAxNSAxMDozNzoxOCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHJlbGF4bmcuYzogZW5oYW5jZWQgdG8gaWdub3JlIFhNTF9YSU5DTFVERV9TVEFSVCBhbmQgWE1MX1hJTkNMVURFX0VORAoJICBub2RlcyAoYnVnIDEzNzE1MykKClN1biBNYXIgMTQgMTM6MTk6MjAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb2huIEJlbG1vbnRlIGZvciBhbnlVUkkuCgpXZWQgTWFyIDEwIDE3OjIyOjQ4IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXggYnVnIHJlcG9ydGVkIGJ5IEhvbGdlciBSYXVjaAoJKiB0ZXN0L2F0dDggcmVzdWx0L25vZW50L2F0dDggcmVzdWx0L2F0dDggcmVzdWx0L2F0dDgucmRyCgkgIHJlc3VsdC9hdHQ4LnNheDogYWRkZWQgdGhlIHRlc3QgdG8gdGggcmVncmVzc2lvbiBzdWl0ZQoKV2VkIE1hciAxMCAxOTo0MjoyMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9zZWFyY2gucGhwOiBNaW5vciBjaGFuZ2UgZm9yIGxhdGVyIHZlcnNvbiBvZiBwaHAgcmVxdWlyaW5nCgkgICRIVFRQX0dFVF9WQVJTLgoKV2VkIE1hciAxMCAwMDoxMjozMSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRyZWUuYzogQ2hhbmdlZCB0aGUgZmxhZyB0byB4bWxEb2NDb3B5Tm9kZSAoYW5kIHNpbWlsYXIgcm91dGluZXMpLAoJICBwcmV2aW91c2x5IHVzZWQgb25seSBmb3IgcmVjdXJzaW9uLCB0byB1c2UgYSB2YWx1ZSBvZiAnMicgdG8KCSAgaW5kaWNhdGUgY29weSBwcm9wZXJ0aWVzICYgbmFtZXNwYWNlcywgYnV0IG5vdCBjaGlsZHJlbi4KCSogeGluY2x1ZGUuYzogY2hhbmdlZCB0aGUgaGFuZGxpbmcgb2YgcmFuZ2VzIHRvIHVzZSB0aGUgYWJvdmUgbmV3CgkgIGZhY2lsaXR5LiAgRml4ZXMgQnVnIDEzNDI2OC4KClR1ZSBNYXIgIDkgMTg6NDg6NTEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2IsIHdpbjMyL01ha2VmaWxlLm1pbmd3LCB3aW4zMi9NYWtlZmlsZS5tc3ZjOgoJICBhZGRlZCBuZXcgbW9kdWxlIHhtbHNhdmUgd2l0aCBwYXRjaCBzdXBwbGllZCBieSBFcmljIFp1cmNoZXIKCSAgKHNlY29uZCBhdHRlbXB0IC0gZG9uJ3Qga25vdyB3aGF0IGhhcHBlbmVkIHRvIHRoZSBmaXJzdCBvbmUhKQoKVHVlIE1hciAgOSAwOTo1OToyNSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogYXBwbGllZCBwYXRjaCBmcm9tIEFudGhvbnkgQ2FycmljbwoJICBwcm92aWRpbmcgUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQ2Fub25pY2FsaXphdGlvbiBDMTROIHN1cHBvcnQuCgpNb24gTWFyICA4IDExOjEyOjIzIENFVCAyMDA0IEhhZ2VuIE1vZWJpdXMgPGhhZ2VuLm1vZWJpdXNAc3RhcnNjaGlmZmNoZW4uZGU+CgoJKiAuY3ZzaWdub3JlIGFuZCBweXRob24vLmN2c2lnbm9yZSBwYXRjaGVkCgpNb24gTWFyICA4IDIyOjMzOjE0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogZW5oYW5jZWQgdG8gYXNzdXJlIHRoYXQgaWYgeHBvaW50ZXIgaXMgY2FsbGVkCgkgIGZvciBhIGRvY3VtZW50LCB0aGUgWE1MX1BBUlNFX05PRU5UIGZsYWcgaXMgc2V0IGJlZm9yZSBwYXJzaW5nCgkgIHRoZSBpbmNsdWRlZCBkb2N1bWVudCBzbyB0aGF0IGVudGl0aWVzIHdpbGwgYXV0b21hdGljYWxseSBnZXQKCSAgdGFrZW4gY2FyZSBvZi4KCSogeHBvaW50ZXIuYzogY29ycmVjdGVkIGNvZGUgc28gdGhhdCwgaWYgYW4gWE1MX0VOVElUWV9SRUYgbm9kZQoJICBpcyBlbmNvdW50ZXJlZCwgaXQgd2lsbCBsb2cgaXQgYW5kIG5vdCBjcmFzaCAoYnVnIDEzNTcxMykKClN1biBNYXIgIDcgMTk6MDM6NDggSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBtb2RpZmllZCB0byBtYWtlIHN1Yi1pbmNsdWRlcyBpbmhlcml0IHRoZQoJICBwYXJzZSBmbGFncyBmcm9tIHRoZSBwYXJlbnQgZG9jdW1lbnQgKGJ1ZyAxMzI1OTcpCgpGcmkgTWFyICA1IDAxOjEzOjIyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogUU5hbWUgaGFuZGxpbmcgZml4ZXMgZm9yIHRoZSBYTUwgU2NoZW1hcwoJICBzdXBwb3J0IGZyb20gQWRhbSBEaWNrbWVpc3MKCSogdGVzdC9zY2hlbWFzL3BvMV8wLnhzZDogYWxzbyBmaXggdGhlIHNjaGVtYXMKCSogdGVzdC9zY2hlbWFzL25zWzEyXSogcmVzdWx0L3NjaGVtYXMvbnNbMTJdKjogYWRkZWQgdGhlIHNwZWNpZmljCgkgIHJlZ3Jlc3Npb24gdGVzdHMKClRodSBNYXIgIDQgMjM6MDM6MDIgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy9NYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbToKCSAgcGFhbGllZCBwYXRjaCBmcm9tIEp1bGlvIE0uIE1lcmlubyBWaWRhbCBmaXhpbmcgYnVnICMxMzQ3NTEKCSAgdG8gZml4IC0td2l0aC1odG1sLWRpciBvcHRpb24uCgkqIGRvYy8qOiByZWJ1aWx0IGZ1bGx5IHRoZSBkb2NzIAoJKiBkb2MvaHRtbC9saWJ4bWwteG1sc2F2ZS5odG1sOiBuZXcgZmlsZSBmcm9tIG5ldyBoZWFkZXIuCgpUaHUgTWFyICA0IDE2OjU3OjUwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgdGVzdEhUTUwuYyB0cmVlLmMgZG9jL2V4YW1wbGVzLyouYwoJICBpbmNsdWRlL2xpYnhtbC94bWxzYXZlLmg6IGZpeGluZyBjb21waWxhdGlvbiBidWcgd2l0aCBzb21lIG9wdGlvbnMKCSAgZGlzYWJsZWQgYXMgd2VsbCBhcyAtLXdpdGgtbWluaW11bSBzaG91bGQgZml4ICMxMzQ2OTUKClRodSBNYXIgIDQgMTU6MDA6NDUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jOiBhbGxvdyBmYWxsYmFjayB0byBVUkkgbG9va3VwIHdoZW4gU1lTVEVNIGZhaWxzLAoJICBzaG91bGQgY2xvc2UgIzEzNDA5MgoKVGh1IE1hciAgNCAxNDozOTozOCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSB0cmVlLmMgeG1sc2F2ZS5jIGluY2x1ZGUvbGlieG1sL3htbHNhdmUuaDogY29tbWl0aW5nCgkgIHRoZSBuZXcgeG1sc2F2ZSBtb2R1bGUgYmVmb3JlIHRoZSBhY3R1YWxsIGJpZyBjb2RlIGNoYW5nZS4KClRodSBNYXIgIDQgMTI6Mzg6NTMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQWRhbSBEaWNrbWVpc3MgZm9yIG1peGVkIGNvbnRlbnQKCSogdGVzdC9zY2hlbWFzL21peGVkKiByZXN1bHQvc2NoZW1hcy9taXhlZCo6IGFkZGVkIGhpcyByZWdyZXNzaW9uCgkgIHRlc3RzIHRvby4KCk1vbiBNYXIgIDEgMTU6MjI6MDYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFNBWC5jOiBmaXggYSBjb21waWxhdGlvbiBwcm9ibGVtIGFib3V0IGEgbWlzc2luZyB0aW1iIGluY2x1ZGUKClNhdCBGZWIgMjggMjI6MzU6MzIgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB0ZXN0U0FYLmM6IHNtYWxsIGVuaGFuY2VtZW50IHRvIHByZXZlbnQgdHJ5aW5nIHRvIHByaW50CgkgIHN0cmluZ3Mgd2l0aCBudWxsIHBvaW50ZXJzIChjYXVzZWQgIm1ha2UgdGVzdHMiIGVycm9ycyBvbgoJICBIUC1VWCkKClRodSBGZWIgMjYgMjA6MTk6NDAgTVNUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LnhtbAoJKiBkb2MveG1sbGludC4xCgkqIGRvYy94bWxsaW50Lmh0bWwKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbAoJKiBkb2MveG1sY2F0YWxvZy4xCgkqIGRvYy94bWxjYXRhbG9nX21hbi5odG1sCglhcHBseWluZyBwYXRjaCBmcm9tIE1pa2UgSG9tbWV5IHRvIGNsYXJpZnkgWE1MX0NBVEFMT0dfRklMRVMKCXVzZQoKVGh1IEZlYiAyNiAyMzo0Nzo0MyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogcGF0Y2ggZm9yIGNyb3NzLWNvbXBpbGF0aW9uIHRvIFdpbmRvd3MgZnJvbQoJICBDaHJpc3RvcGhlIGRlIFZJRU5ORS4KClRodSBGZWIgMjYgMTg6NTI6MTEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvKi5odG1sLCBkb2MvaHRtbC8qLmh0bWw6IHJlZ2VuZXJhdGVkIGRvY3MgdXNpbmcgb2xkZXIKCSAgdmVyc2lvbiBvZiB4c2x0cHJvYyBwZW5kaW5nIHJlc29sdXRpb24gb2YgQVZUIHByb2JsZW0KClRodSBGZWIgMjYgMTA6NTY6MjkgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFwcGxpZWQgcGF0Y2ggZnJvbSBDaGFybGVzIEJvemVtYW4gdG8gbm90IHVzZQoJICB0aGUgc3lzdGVtIHhtbGxpbnQuCgpXZWQgRmViIDI1IDE4OjA3OjA1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaDogYXBwbGllZCBwYXRjaCBmcm9tIFJvbGFuZCBTY2h3aW5nZWwKCSAgZm9yIE1pbmdXCgpXZWQgRmViIDI1IDEzOjU3OjI1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNhdGFsb2cuYyBjb25maWd1cmUuaW46IGFwcGxpZWQgYSBjbGVhbnVwIHBhdGNoCgkgIGZyb20gUGV0ZXIgQnJlaXRlbmxvaG5lcgoJKiB0cmVlLmM6IHJlbW92ZWQgYSBkb2MgYnVpbGQgd2FybmluZyBieSBmaXhpbmcgYSBwYXJhbSBjb21tZW50CgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jcwoKV2VkIEZlYiAyNSAxMzozMzowNyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIEhUTUxwYXJzZXIuYzogYXZvaWQgSUQgZXJyb3IgbWVzc2FnZSBpZiB1c2luZwoJICBIVE1MX1BBUlNFX05PRVJST1Igc2hvdWxkIGZpeCAjMTMwNzYyCgpXZWQgRmViIDI1IDEyOjUwOjUzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgcmVsYXhuZy5jIHZhbGlkLmMgeGluY2x1ZGUuYyB4bWxsaW50LmMgeG1scmVhZGVyLmM6CgkgIGZpeGluZyBjb21waWxhdGlvbiBhbmQgbGluayBvcHRpb24gd2hlbiBjb25maWd1cmluZyB3aXRoCgkgIC0td2l0aG91dC12YWxpZCBzaG91bGQgZml4ICMxMzUzMDkKCldlZCBGZWIgMjUgMTE6MzY6MDYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiBmaXhlZCB0aGUgbWFpbiBpc3N1ZXMgcmVwb3J0ZWQgYnkgUGV0ZXIgQnJlaXRlbmxvaG5lcgoJKiBwYXJzZXIuYzogY2xlYW51cAoJKiB2YWxpZC5jOiBzcGVlZHVwIHBhdGNoIGZyb20gUGV0ciBQYWphcwoKV2VkIEZlYiAyNSAxNjowNzoxNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbWVtb3J5IGxlYWsgKHhtbFhQYXRoTGFuZ0Z1bmN0aW9uKSByZXBvcnRlZAoJICBvbiB0aGUgbGlzdCBieSBNaWtlIEhvbW1leQoKTW9uIEZlYiAyMyAxNzoyODozNCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKiBORVdTIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNi43IHJlbGVhc2UsIHVwZGF0ZWQgYW5kCgkgIHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24uCgpNb24gRmViIDIzIDExOjUyOjEyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90ZXN0cy8qLnB5OiBhcHBsaWVkIHBhdGNoIGZyb20gTWFsY29sbSBUcmVkaW5uaWNrCgkgIHRvIGF2b2lkIHRhYnMgaW4gcHl0aG9uIHNvdXJjZXMsIHNob3VsZCBmaXggIzEzNTA5NQoKU3VuIEZlYiAyMiAyMzoxNjoyMyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0U0FYLmM6IGFkZCAtLXRpbWluZyBvcHRpb24KCSogcmVsYXhuZy5jOiB1c2UgdGhlIHBzdmkgZmllbGQgb2YgdGhlIG5vZGVzIGluc3RlYWQgb2YgX3ByaXZhdGUKCSAgd2hpY2ggbWF5IGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgoKU2F0IEZlYiAyMSAxNjo1Nzo0OCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBzbWFsbCBwYXRjaCB0byB0cnkgdG8gZml4IGEgd2FybmluZyB3aXRoIFN1biBPbmUgY29tcGlsZXIKClNhdCBGZWIgMjEgMTY6MjI6MzUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogc21hbGwgcGF0Y2ggcmVtb3ZpbmcgYSB3YXJuaW5nIHdpdGggTVMgY29tcGlsZXIuCgpTYXQgRmViIDIxIDEzOjUyOjMwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGFkZGVkICJyZWxheG5nIiBvcHRpb24gdG8gdGhlIGRlYnVnZ2luZyBzaGVsbAoJKiBNYWtlZmlsZS5hbSB0ZXN0L2Vycm9ycy8qIHJlc3VsdC9lcnJvcnMvKjogc29tZSByZWdyZXNzaW9uIHRlc3RzCgkgIGZvciBzb21lIGVycm9yIHRlc3RzIGNhc2VzLgoKRnJpIEZlYiAyMCAwOTo1Njo0NyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHhtbEF0dHJTZXJpYWxpemVUeHRDb250ZW50IGRvbid0IHNlZ2ZhdWx0IGlmIE5VTEwKCSAgaXMgcGFzc2VkLgoJKiB0ZXN0L2F0dDcgcmVzdWx0Ly9hdHQ3KjogYWRkaW5nIGFuIG9sZCByZWdyZXNzaW9uIHRlc3QKCSAgbGF5aW5nIGFyb3VuZCBvbiBteSBsYXB0b3AKClRodSBGZWIgMTkgMTc6MzM6MzYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIHhtbGxpbnQgLS1tZW1vcnkgLS1zdHJlYW0gbWVtb3J5IGNvbnN1bXB0aW9uCgkgIG9uIGxhcmdlIGZpbGUgYnkgdXNpbmcgeG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMoKSB3aXRoCgkgIHRoZSBtbWFwJ2VkIGZpbGUgCgpUaHUgRmViIDE5IDEzOjU2OjUzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogc29tZSBjbGFyaWZpY2F0aW9uIGluIHhtbERvY0R1bXBNZW1vcnkoKSBkb2N1bWVudGF0aW9uCgkqIHhtbGxpbnQuYzogZml4ZWQgeG1sbGludCAtLXN0cmVhbSAtLXRpbWluZyB0byBnZXQgdGltaW5ncyBiYWNrCgpXZWQgRmViIDE4IDE1OjIwOjQyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIHByb2JsZW0gaW4gcHVzaCBtb2RlIHdoZW4gYXR0cmlidXRlIGNvbnRhaW5zCgkgIHVuZXNjYXBlZCAnPicgY2hhcmFjdGVycywgZml4ZXMgYnVnICMxMzQ1NjYKCSogdGVzdC9hdHQ2IHJlc3VsdC8vYXR0Nio6IGFkZGVkIHRoZSB0ZXN0IHRvIHRoZSByZWdyZXNzaW9uIHN1aXRlCgpUdWUgRmViIDE3IDE3OjI2OjMxIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IHJlbW92aW5nIGEgbm9uLWxpbmVhciBiZWhhdmlvdXIgZnJvbSBJRC9JRFJFRiByYWlzZWQKCSAgYnkgUGV0ciBQYWphcy4gQ2FsbCB4bWxMaXN0QXBwZW5kIGluc3RlYWQgb2YgeG1sTGlzdEluc2VydCBpbgoJICB4bWxBZGRSZWYKClR1ZSBGZWIgMTcgMTM6Mjc6MjcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3Rlc3RzL2luZGV4ZXMucHkgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogaW5kaWNhdGVkCgkgIGVuY29kaW5nIG9mIHRoZSB0ZXN0IGZpbGUsIG5lZWRlZCBmb3IgcHl0aG9uIDIuMwoKVHVlIEZlYiAxNyAyMTowODoxMSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIHByb2JsZW0gd2l0aCBudW1iZXJzIGhhdmluZyA+IDE5CgkgIGZyYWN0aW9uYWwgcGxhY2VzIChidWcgMTMzOTIxKQoKVHVlIEZlYiAxNyAxMjo0NzoyMCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBhcHBsaWVkIG9wdGltaXphdGlvbiBwYXRjaCBmcm9tIFBldHIgUGFqYXMKClR1ZSBGZWIgMTcgMTI6Mzk6MDggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmMgaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmg6IGFwcGxpZWQgdXBkYXRlCgkgIGZyb20gQWxmcmVkIE1pY2thdXRzY2ggYW5kIHRoZSBhZGRlZCBwYXRjaCBmcm9tIEx1Y2FzIEJyYXNpbGlubwoKU3VuIEZlYiAxNSAxMjowMTozMCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBiZW5jaG1hcmsucG5nIGluZGV4Lmh0bWwgeG1sLmh0bWw6IHVwZGF0aW5nIHRoZSBiZW5jaG1hcmsKCSAgZ3JhcGggYW5kIHVzaW5nIGEgUE5HIGluc3RlYWQgb2YgYSBHSUYKCSogeG1scmVhZGVyLmM6IHVwZGF0ZWQgdGhlIFRPRE8KClNhdCBGZWIgMTQgMTg6NTU6NDAgTVNUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnBkZgoJKiBkb2MvdHV0b3JpYWwvKi5odG1sCglGaXggYnVnIGluIFhQYXRoIGV4YW1wbGUgaW4gdGhlIHR1dG9yaWFsLCB0aGFua3MgdG8gQ2FybG9zLCB3aG9zZQoJbGFzdCBuYW1lIEkgZG9uJ3Qga25vdywgZm9yIHBvaW50aW5nIHRoaXMgb3V0CgpUaHUgRmViIDEyIDE2OjI4OjEyIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSBvZiAyLjYuNgoJKiBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcyBhbmQgcmVidWlsdCB0aGVtCgpUaHUgRmViIDEyIDEzOjQxOjE2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jOiBmaXhpbmcgYnVnICMxMzI5MzAgd2l0aCB0aGUgcHJvdmlkZWQgcGF0Y2gsIGEgYml0CgkgIHN1c3BpY2lvdXMgYWJvdXQgaXQgYnV0IHRoaXMgaXMgZmFpcmx5IGNvbnRhaW5lZCBhbmQgcmVncmVzc2lvbgoJICB0ZXN0cyBzdGlsbCBwYXNzZXMuCgkqIHRlc3Qvc2NoZW1hcy9hbGwxKiByZXN1bHQvc2NoZW1hcy9hbGwxKjogYWRkZWQgdGhlIHRlc3QgdG8KCSAgdGhlIHJlZ3Jlc3Npb24gc3VpdGUuCgpUaHUgRmViIDEyIDEyOjU0OjI2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBidWcgIzEzMjU3NSBhYm91dCBmaW5kaW5nIHRoZSBlbmQgb2YgdGhlCgkgIGludGVybmFsIHN1YnNldCBpbiBwdXNoIG1vZGUuCgkqIHRlc3QvaW50c3Vic2V0LnhtbCByZXN1bHQvaW50c3Vic2V0LnhtbCogcmVzdWx0L25vZW50L2ludHN1YnNldC54bWw6CgkgIGFkZGVkIHRoZSB0ZXN0IHRvIHRoZSByZWdyZXNzaW9uIHN1aXRlCgpXZWQgRmViIDExIDE0OjE5OjMxIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jIHhtbElPLmMgZW5jb2RpbmcuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBhZGRlZCB4bWxCeXRlQ29uc3VtZWQoKSBpbnRlcmZhY2UKCSogZG9jLyo6IHVwZGF0ZWQgdGhlIGJlbmNobWFyayByZWJ1aWx0IHRoZSBkb2NzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvaW5kZXhlcy5weTogYWRkZWQgYQoJICBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QgZm9yIHhtbEJ5dGVDb25zdW1lZCgpCgkqIGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmggcm5ncGFyc2VyLmMgdHJlZS5jOiBzbWFsbCBjbGVhbnVwcwoKV2VkIEZlYiAxMSAwODoxMzo1OCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oawoKCSogdHJlZS5jOiBmaXhlZCBtaXNzaW5nIG91dHB1dCBvZiBpbnRlcm5hbCBEVEQgcGFyYW0gZW50aXRpZXMgd2hlbgoJICBub3RoaW5nIGVsc2UgcHJlc2VudCBpbiBEVEQgKGJ1ZyAxMzQwNTIpCgpUdWUgRmViIDEwIDE5OjI0OjM4IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYzogYXBwbGllZCBwYXRjaCBzdXBwbGllZCBieSBDaHJpc3RvcGhlIER1YmFjaAoJICB0byBmaXggcHJvYmxlbSB3aXRoIC0td2l0aC1taW5pbXVtIGNvbmZpZ3VyYXRpb24KCSAgKGJ1ZyAxMzM3NzMpCgkqIG5hbm9mdHAuYzogZml4ZWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBwcm9ibGVtLAoJICBzaW1pbGFyIHRvIGZpeCBqdXN0IGFwcGxpZWQgdG8gbmFub2h0dHAuYy4KCk1vbiBGZWIgIDkgMTg6NDA6MjEgQ0VUIDIwMDQgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIG5hbm9odHRwLmM6IGZpeGVkIHRoZSBmaXggZm9yIHRoZSBidWZmZXIgb3ZlcmZsb3csIHRoYW54CgkgIFdpbGxpYW0gOi0pCgpNb24gRmViICA5IDIyOjM3OjE0IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogYWNpbmNsdWRlLm00LCBjb25maWd1cmUuaW46IGZpeGVkIHByb2JsZW0gY29uY2VybmluZwoJICBkZXRlcm1pbmluZyBTT0NLTEVOX1QgYXMgcG9pbnRlZCBvdXQgYnkgRGFuaWVsIFJpY2hhcmQgRy4KCSAgb24gdGhlIG1haWxpbmcgbGlzdAoKTW9uIEZlYiAgOSAxNTozMToyNCBDRVQgMjAwNCBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogbmFub2h0dHAuYzogZml4ZWQgYnVmZmVyIG92ZXJmbG93IHJlcG9ydGVkIGJ5IFl1dWljaGkgVGVyYW5pc2hpCgpNb24gRmViICA5IDEzOjQ1OjU5IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHNtYWxsIHBhdGNoIGZyb20gUGhpbGlwIEx1ZGxhbSB0byBhdm9pZCB3YXJuaW5ncy4KCk1vbiBGZWIgIDkgMTM6NDE6NDcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogYXBwbGllZCBhIHNtYWxsIHBhdGNoIGZyb20gQWxmcmVkIE1pY2thdXRzY2gKCSAgdG8gYXZvaWQgYW4gb3V0IG9mIGJvdW5kIGVycm9yIGluIGlzb2xhdDFUb1VURjgoKQoKTW9uIEZlYiAgOSAxMzozNTo1MCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiByZW1vdmUgdGhlIHdhcm5pbmcgb24gdGhlIDIwMDEgbmFtZXNwYWNlCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHhwYXRoLmM6IHJlbW92ZSBzb21lIHdhcm5pbmdzCgkgIHdoZW4gY29tcGlsaW5nIHdpdGggTVNWQzYKCSogbmFub2h0dHAuYzogYXBwbGllZCBhIHBhdGNoIHdoZW4gdXNpbmcgX1dJTlNPQ0tBUElfCgpTdW4gRmViICA4IDEyOjA5OjU1IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogYWRkZWQgYSBzbWFsbCBoYWNrIHRvIGZpeCBpbnRlcmZlcmVuY2UgYmV0d2VlbgoJICBteSBmaXhlcyBmb3IgYnVncyAxMzI1ODUgYW5kIDEzMjU4OC4KCSogcHl0aG9uL2xpYnhtbC5jOiBmaXhlZCBwcm9ibGVtIHdpdGggc2VyaWFsaXphdGlvbiBvZiBuYW1lc3BhY2UKCSAgcmVwb3J0ZWQgb24gdGhlIG1haWxpbmcgbGlzdCBieSBBbnRob255IENhcnJpY28KClNhdCBGZWIgIDcgMTY6NTM6MTEgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBwcm9ibGVtIHdpdGggZnVuY3Rpb24geG1sWEluY2x1ZGVDb3B5UmFuZ2UKCSAgKGJ1ZyAxMzM2ODYpLgoKRnJpIEZlYiAgNiAyMTowMzo0MSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHdyaXRlci5jOiBmaXhlZCBwcm9ibGVtIHdpdGggcmV0dXJuIHZhbHVlIG9mCgkgIHhtbFRleHRXcml0ZXJXcml0ZUluZGVudCgpIChidWcgMTMzMjk3KQoKRnJpIEZlYiAgNiAxOTowNzowNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGNoYW5nZWQgY29kaW5nIHRvIG91dHB1dCBnb29kIFhJbmNsdWRlcyB3aGVuCgkgIG9uZSBvciBtb3JlIGJhZCBvbmVzIGFyZSBwcmVzZW50IChidWcgMTMyNTg4KQoKRnJpIEZlYiAgNiAxNzozNDoyMSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhpbmNsdWRlLmM6IGNvcnJlY3RlZCBoYW5kbGluZyBvZiBlbXB0eSBmYWxsYmFjayBjb25kaXRpb24KCSAgKGJ1ZyAxMzI1ODUpCgpGcmkgRmViICA2IDE1OjI4OjM2IEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogSFRNTHBhcnNlci5jOiBhZGRlZCBpbml0aWFsaXNhdGlvbiBmb3IgY3R4dC0+dmN0eHQKCSAgaW4gSFRNTEluaXRQYXJzZXIgKGJ1ZyAxMzMxMjcpCgkqIHZhbGlkLmM6IG1pbm9yIGNvc21ldGljIGNoYW5nZSAocmVtb3ZlZCBBVFRSSUJVVEVfVU5VU0VECgkgIGZyb20gc2V2ZXJhbCBmdW5jdGlvbiBwYXJhbXMpCgpUdWUgRmViICAzIDE2OjQ4OjU3IFBTVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgcHJvYmxlbSByZWdhcmRpbmcgZnJlZWluZyBvZiBkaWN0aW9uYXJ5CgkgIHdoZW4gdGhlcmUgYXJlIGVycm9ycyB3aXRoaW4gYW4gWEluY2x1ZGUgZmlsZSAoYnVnIDEzMzEwNikuCgkgIFRoYW5rcyB0byBPbGVnIFBhcmFzY2hlbmtvIGZvciB0aGUgYXNzaXN0YW5jZS4KClR1ZSBGZWIgIDMgMDk6NTM6MTggUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgdmFsaWRhdGlvbiBvZiBtYXhMZW5ndGggd2l0aCBubwoJICBjb250ZW50IHVzaW5nIHBhdGNoIHN1Ym1pdHRlZCBieSBFcmljIEhhc3psYWtpZXdpY3oKCSAgKGJ1ZyAxMzMyNTkpCgpUdWUgRmViICAzIDA5OjIxOjA5IENFVCAyMDA0IElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogYWRkZWQKCSAgY2FsbGluZyBjb252ZW50aW9uIHRvIHRoZSBwdWJsaWMgZnVuY3Rpb24gcHJvdG90eXBlcyAocmVwIGJ5CgkgIENhbWVyb24gSm9obnNvbikKCSogaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oOiBmaXhlZCBtaW5ndyttc3lzIGNvbXBpbGF0aW9uCgkgIChyZXAgYnkgTWlraGFpbCBHcnVzaGluc2tpeSkKCk1vbiBGZWIgIDIgMjA6MjI6MTggUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWx3cml0ZXIuYzogZW5oYW5jZWQgb3V0cHV0IGluZGVudGluZyAoYnVnIDEzMzI2NCkKCk1vbiBGZWIgIDIgMTY6MTM6MzMgUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxyZWFkZXIuYywgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbQoJICBTdGV2ZSBCYWxsIHRvIHByb3ZpZGUgc3RydWN0dXJlZCBlcnJvciByZXBvcnRzLgoKU3VuIEZlYiAgMSAwMTo0ODoxNCBQU1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRyZWUuYywgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBtb3ZlZCBzZXJpYWxpemF0aW9uIG9mCgkgIGF0dHJpYnV0ZSB0ZXh0IGRhdGEgKHhtbFNlcmlhbGl6ZUNvbnRlbnQpIGludG8gYSBzZXBhcmF0ZQoJICByb3V0aW5lICh4bWxTZXJpYWxpemVUeHRDb250ZW50KSBzbyBpdCBjYW4gYmUgdXNlZCBieSB4bWx3cml0ZXIuYwoJKiB4bWx3cml0ZXIuYzogY2hhbmdlZCBoYW5kbGluZyBvZiBhdHRyaWJ1dGUgc3RyaW5nIHRvIHVzZSB0aGUKCSAgcm91dGluZSBhYm92ZSAoZml4ZWQgYnVnIDEzMTU0OCkKClNhdCBKYW4gMzEgMDg6MjI6MDIgTVNUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldAoKCSogZG9jL2V4YW1wbGVzL3JlYWRlcjEuYywgcmVhZGVyMi5jLCByZWFkZXIzLmMKCSogZG9jL2V4YW1wbGVzL2V4YW1wbGVzLnhtbAoJKiBkb2MvZXhhbXBsZXMvKi5odG1sCglhZGQgbm90ZSB0aGF0IHJlYWRlciBleGFtcGxlcyBuZWVkIGxpYm14bDIgPiAyLjYsIHJlYnVpbGQKCWh0bWwgLSB0aGlzIHRpbWUgZG9pbmcgaXQgY29ycmVjdGx5IDotKQoKRnJpIEphbiAzMCAyMDo0NTozNiBNU1QgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2V4YW1wbGVzL2V4YW1wbGVzLnhtbAoJKiBkb2MvZXhhbXBsZXMvKi5odG1sCglhZGQgbm90ZSB0aGF0IHJlYWRlciBleGFtcGxlcyBuZWVkIGxpYm14bDIgPiAyLjYsIHJlYnVpbGQKCWh0bWwKClRodSBKYW4gMjkgMjM6NTE6NDggUFNUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBhZGRlZCAodm9pZCAqKSB0eXBlIG92ZXJyaWRlIHRvIHByZXZlbnQKCSAgd2FybmluZyBvbiBTb2xhcmlzIChCdWcgMTMyNjcxKQoKV2VkIEphbiAyOCAwNzoyMDozNyBNU1QgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtCglwZXIgSmFuLiAxNSBlbWFpbCB0byB0aGUgbGlzdCBmcm9tIG9saXZlcnN0LCB0aGUgaW5kZXguaHRtbAoJZmlsZSBmcm9tIHRoaXMgZGlyZWN0b3J5IHdhc24ndCBtYWtpbmcgaXQgaW50byB0aGUgdGFyYmFsbAoKTW9uIEphbiAyNiAxODowMTowMCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBhY2luY2x1ZGUubTQ6IGFwcGxpZWQgZml4IGZyb20gQWxleGFuZGVyIFdpbnN0b24gZm9yIGEgcHJvYmxlbQoJICByZWxhdGVkIHRvIGF1dG9tYWtlLTEuOCAsIGMuZi4gIzEzMjUxMyBhbmQgIzEyOTg2MQoKTW9uIEphbiAyNiAxMjo1MzoxMSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMvaW5kZXgucHk6IGRvbid0IHJlbHkgb24gLiBiZWluZyBvbiB0aGUgcGF0aCBmb3IKCSAgbWFrZSB0ZXN0cywgc2hvdWxkIGtlZXAgTXIuIENyb3phdCBxdWlldCB1bnRpbCBuZXh0IHRpbWUuLi4KClN1biBKYW4gMjUgMjE6NDU6MDMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1MgZG9jLyo6IHByZXBhcmluZyByZWxlYXNlIDIuNi41LCByZWJ1aWx0IHRoZQoJICBkb2NzLCBjaGVja2VkIHJuZ3BhcnNlciBzdHVmZiBkb2VzIG5vdCBlbmQgdXAgaW4gdGhlIHRhcmJhbGwKClN1biBKYW4gMjUgMjA6NTk6MjAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gRnJlZGVyaWMgUGV0ZXJzCgkgIGZpeGluZyB0aGUgd3JvbmcgYXJnIG9yZGVyIGluIHhwYXRoIGNhbGxiYWNrIGluIGJ1ZyAjMTMwOTgwCgpTdW4gSmFuIDI1IDIwOjUyOjA5IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZpeGluZyAjMTMwNDUzIFhJbmNsdWRlIGVsZW1lbnQgd2l0aCBubyBocmVmIGF0dHJpYnV0ZQoJKiByZWxheG5nLmMgcm5ncGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwyL3JlbGF4bmcuaDogZnVsbHkgaW50ZWdyYXRpbmcgCgkgIHRoZSBjb21wYWN0IHN5bnRheCB3aWxsIHJlcXVpcmUgbW9yZSB3b3JrLCBwb3N0cG9uZWQgZm9yIHRoZQoJICAyLjYuNSByZWxlYXNlLgoKU2F0IEphbiAyNCAwOTozMDoyMiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmggeG1sc2NoZW1hcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20KCSAgU3RldmUgQmFsbCB0byBhdm9pZCBhIGRvdWJsZS1mcmVlLgoKRnJpIEphbiAyMyAxNDowMzoyMSBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMvKjogYWRkZWQgaW8xLmMgYW4gZXhhbXBsZSBveCB4bWxJTyB1c2FnZSBhbmQgaW8xLnJlcwoJICB0ZXN0IHJlc3VsdCwgZml4ZWQgYSBhd2Z1bCBsb3Qgb2YgbWVtb3J5IGxlYWtzIHNob3dpbmcgdXAgaW4KCSAgdGVzdFdyaXRlci5jLCBjaGFuZ2VkIHRoZSBleGFtcGxlcyBhbmQgdGhlIE1ha2VmaWxlcyB0byB0ZXN0CgkgIG1lbW9yeSBsZWFrcy4KCSogeG1sd3JpdGVyLmM6IGZpeGVkIGEgbWVtb3J5IGxlYWsKCSogTWFrZWZpbGUuYW06IHJ1biB0aGUgZG9jL2V4YW1wbGVzIHJlZ3Jlc3Npb24gdGVzdHMgYXMgcGFydCBvZgoJICBtYWtlIHRlc3RzCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGguaDogYWRkZWQgeG1sWFBhdGhDdHh0Q29tcGlsZSgpIHRvCgkgIGNvbXBpbGUgYW4gWFBhdGggZXhwcmVzc2lvbiB3aXRoaW4gYSBjb250ZXh0LCBjdXJyZW50bHkgdGhlIGdvYWwKCSAgaXMgdG8gYmUgYWJsZSB0byByZXVzZSB0aGUgWFNMVCBzdHlsZXNoZWV0IGRpY3Rpb25uYXJ5LCBidXQgdGhpcwoJICBvcGVucyB0aGUgZG9vciB0byBvdGhlcnMgcG9zc2libGUgb3B0aW1pemF0aW9ucy4KCSogZGljdC5jIGluY2x1ZGUvbGlieG1sL2RpY3QuaDogYWRkZWQgeG1sRGljdENyZWF0ZVN1YigpIHdoaWNoIGFsbG93cwoJICB0byBidWlsZCBhIG5ldyBkaWN0aW9ubmFyeSBiYXNlZCBvbiBhbm90aGVyIHJlYWQtb25seSBkaWN0aW9ubmFyeS4KCSAgVGhpcyBpcyBuZWVkZWQgZm9yIFhTTFQgdG8ga2VlcCB0aGUgc3R5bGVzaGVldCBkaWN0aW9ubmFyeSByZWFkLW9ubHkKCSAgd2hpbGUgYmVpbmcgYWJsZSB0byByZXVzZSB0aGUgc3RyaW5ncyBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uCgkgIGRpY3Rpb25uYXJ5LgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBhIGRpY3Rpb25uYXIgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW0gb2NjdXJpbmcKCSAgd2hlbiBkb2N1bWVudCBwYXJzaW5nIGZhaWxlZC4KCSogdGVzdFNBWC5jOiBhZGRpbmcgb3B0aW9uIC0tcmVwZWF0IGZvciB0aW1pbmcgMTAwdGltZXMgdGhlIHBhcnNpbmcKCSogZG9jLyogOiByZWJ1aWx0IGFsbCB0aGUgZG9jcwoKVGh1IEphbiAyMiAxNDoxNzowNSAyMDA0ICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHhtbG1lbW9yeS5jOiBtYWtlIHhtbFJlYWxsb2NMb2MoKSBhY2NlcHQgTlVMTCBwb2ludGVyCgpUaHUgSmFuIDIyIDA4OjI2OjIwIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSm9obiBCZWxtb250ZSBmb3IKCSAgbm9ybWFsaXplZFN0cmluZyBkYXRhdHlwZSBzdXBwb3J0LgoKVGh1IEphbiAyMiAxMDo0MzoyMiBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIHByb2JsZW0gd2l0aCB1bmlvbiB3aGVuIGxhc3QoKSBpcyB1c2VkCgkgIGluIHByZWRpY2F0ZSAoYnVnICMxMzE5NzEpCgkqIHhwb2ludGVyLmM6IG1pbm9yIGNoYW5nZSB0byBjb21tZW50IGZvciBkb2MgZ2VuZXJhdGlvbgoKV2VkIEphbiAyMSAxNzowMzoxNyBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYnVnICMxMzE3NDUgcmFpc2VkIGJ5IFNoYXVuIE1jQ2FuY2Ugd2l0aCB0aGUKCSAgc3VnZ2VzdGVkIHBhdGNoCgpXZWQgSmFuIDIxIDEwOjU5OjU1IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHdyaXRlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQWxmcmVkIE1pY2thdXRzY2ggZml4aW5nIGEgbWVtb3J5CgkgIGxlYWsgcmVwb3J0ZWQgb24gdGhlIGxpc3QuCgpUaHUgSmFuIDE1IDAwOjQ4OjQ2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL3Rlc3RzL3RzdExhc3RFcnJvci5weTogYXBwbGllZAoJICBwYXRjaCBmcm9tIFN0ZXBoYW5lIEJpZG91bCB0byBhZGQgZW51bXMgdG8gdGhlIFB5dGhvbiBiaW5kaW5ncy4KClR1ZSBKYW4gMTMgMjE6NTA6MDUgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdEhUTUwuYzogYW5vdGhlciBzbWFsbCBwYXRjaCBmcm9tIE1hcmsgVmFrb2MKClR1ZSBKYW4gMTMgMjE6Mzk6NTggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHJlbGF4bmcuYyB0ZXN0UmVsYXguYyB0ZXN0U2NoZW1hcy5jOiBhcHBsaWVkCgkgIHBhdGNoIGZyb20gTWFyayBWYWtvYyB0byBub3QgdXNlIFNBWDEgdW5sZXNzIG5lY2Vzc2FyeS4KCk1vbiBKYW4gMTIgMTc6MjI6NTcgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jIHBhcnNlci5jIHhtbHN0cmluZy5jOiBzb21lIHBhcnNlciBvcHRpbWl6YXRpb25zLAoJICB4bWxsaW50IC0tbWVtb3J5IC0tdGltaW5nIC0tcmVwZWF0IC0tc3RyZWFtIC4vZGIxMDAwMC54bWwKCSAgd2VudCBkb3duIGZyb20gMTYuNSBzZWNzIHRvIDE1LjUgc2Vjcy4KClRodSBKYW4gIDggMTc6NTc6NTAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiByZW1vdmVkIGEgbWVtb3J5IGxlYWsgcmVtYWluaW5nIGZyb20gdGhlIHN3aXRjaAoJICB0byBhIGRpY3Rpb25uYXJ5IGZvciBzdHJpbmcgYWxsb2NhdGlvbnMgYy5mLiAjMTMwODkxCgpUaHUgSmFuICA4IDE3OjQ4OjQ2IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhpbmcgc29tZSBwcm9ibGVtIGlmIGNvbmZpZ3VyZWQgLS13aXRob3V0LXhpbmNsdWRlCgkgIGMuZi4gIzEzMDkwMgoKVGh1IEphbiAgOCAxNzo0Mjo0OCBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGNoYW5nZWQgQUNfT1VUUFVUKCkgbWFjcm8gdG8gYXZvaWQgYSBjeWd3aW4gcHJvYmxlbQoJICBjLmYuICMxMzA4OTYKClRodSBKYW4gIDggMDA6MzY6MDAgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuYmNiIHdpbjMyL01ha2VmaWxlLm1pbmd3IHdpbjMyL01ha2VmaWxlLm1zdmM6CgkgIGFwcGx5aW5nIHBhdGNoIGZyb20gTWFyayBWYWtvYyBmb3IgV2luZG93cwoJKiBkb2MvY2F0YWxvZy5odG1sIGRvYy9lbmNvZGluZy5odG1sIGRvYy94bWwuaHRtbDogYXBwbGllZCBkb2MKCSAgZml4ZXMgZnJvbSBTdmVuIFppbW1lcm1hbgoKVHVlIEphbiAgNiAyMzo1MTo0NiBDRVQgMjAwNCBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYwoJICBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3RzdExhc3RFcnJvci5weTogYXBwbGllZCAKCSAgcGF0Y2ggZnJvbSBTdGVwaGFuZSBCaWRvdWwgZm9yIHN0cnVjdHVyZWQgZXJyb3IgaGFuZGxpbmcgZnJvbQoJICBweXRob24sIGFuZCB0aGUgYXNzb2NpYXRlZCB0ZXN0CgpUdWUgSmFuICA2IDIzOjE4OjExIEhLVCAyMDA0IFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBCdWcxMzA1OTMKCSogeG1sd3JpdGVyLmM6IGZpeGVkIGNvbXBpbGF0aW9uIHdhcm5pbmcKClR1ZSBKYW4gIDYgMTU6MTU6MjMgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sc3RyaW5nLmg6IGZpeGVkIHRoZSBjb21tZW50IGluIHRoZSBoZWFkZXIKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3MKClR1ZSBKYW4gIDYgMTk6NDA6MDQgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlbmNvZGluZy5jLCBwYXJzZXIuYywgeG1sc3RyaW5nLmMsIE1ha2VmaWxlLmFtLAoJICBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSwgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5jLAoJICBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmgsIGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmgsCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oLCBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmgsCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaCwgaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmgsCgkgIGluY2x1ZGUvbGlieG1sL3htbHN0cmluZy5oOgoJICBtb3ZlZCBzdHJpbmcgYW5kIFVURjggcm91dGluZXMgb3V0IG9mIHBhcnNlci5jIGFuZCBlbmNvZGluZy5jCgkgIGludG8gYSBuZXcgbW9kdWxlIHhtbHN0cmluZy5jIHdpdGggaW5jbHVkZSBmaWxlCgkgIGluY2x1ZGUvbGlieG1sL3htbHN0cmluZy5oIG1vc3RseSB1c2luZyBwYXRjaGVzIGZyb20gUmVpZAoJICBTcGVuY2VyLiAgU2luY2UgeG1sQ2hhciBub3cgZGVmaW5lZCBpbiB4bWxzdHJpbmcuaCwgc2V2ZXJhbAoJICBpbmNsdWRlIGZpbGVzIG5lZWRlZCB0byBoYXZlIGEgI2luY2x1ZGUgYWRkZWQgZm9yIHNhZmV0eS4KCSogZG9jL2FwaWJ1aWxkLnB5OiBhZGRlZCBzb21lIGFkZGl0aW9uYWwgc29ydGluZyBmb3IgdmFyaW91cwoJICByZWZlcmVuY2VzIGRpc3BsYXllZCBpbiB0aGUgQVBJeHh4Lmh0bWwgZmlsZXMuICBSZWJ1aWx0IHRoZQoJICBkb2NzLCBhbmQgYWxzbyBhZGRlZCBuZXcgZmlsZSBmb3IgeG1sc3RyaW5nIG1vZHVsZS4KCSogY29uZmlndXJlLmluOiBzbWFsbCBhZGRpdGlvbiB0byBoZWxwIG15IHRlc3Rpbmc7IG5vIGVmZmVjdCBvbgoJICBub3JtYWwgdXNhZ2UuCgkqIGRvYy9zZWFyY2gucGhwOiBhZGRlZCAkX0dFVFtxdWVyeV0gc28gdGhhdCBwZXJzaXN0ZW50IGdsb2JhbHMKCSAgY2FuIGJlIGRpc2FibGVkIChmb3IgcmVjZW50IHZlcnNpb25zIG9mIFBIUCkKCk1vbiBKYW4gIDUgMjA6NDc6MDcgTVNUIDIwMDQgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC9jdXN0b21mby54c2wKCSogZG9jL3R1dG9yaWFsL2N1c3RvbWh0bWwueHNsCgl1cGRhdGUgY3VzdG9tIHR1dG9yaWFsLWJ1aWxkaW5nIHN0eWxlc2hlZXRzIGluIHByZXBhcmF0aW9uCglmb3IgdHV0b3JpYWwgdXBkYXRlCgpUdWUgSmFuICA2IDAwOjEwOjMzIENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJuZ3BhcnNlci5jOiBjb21taXRpbmcgdGhlIGNvbXBhY3QgcmVsYXggbmcgcGFyc2VyLiBJdCdzIG5vdAoJICBjb21wbGV0ZWx5IGZpbmlzaGVkLCBpdCdzIG5vdCBpbnRlZ3JhdGVkIGJ1dCBJIHdhbnQgdG8gc2F2ZSB0aGUKCSAgY3VycmVudCBzdGF0ZQoKTW9uIEphbiAgNSAyMjoyMjo0OCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9hcGlidWlsZC5weSwgZG9jL0FQSWNvbnN0cnVjdG9ycy5odG1sLCBkb2MvbGlieG1sMi1yZWZzLnhtbCwKCSAgd2luMzIvbGlieG1sMi5kZWYuc3JjOiBmaXhlZCBhcGlidWlsZC5weSdzIGdlbmVyYXRpb24gb2YKCSAgImNvbnN0cnVjdG9ycyIgdG8gYmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIChpbnN0ZWFkIG9mIHByZXZpb3VzCgkgIHJhbmRvbSBzZXF1ZW5jZSk7IHJlZ2VuZXJhdGVkIHJlc3VsdGluZyBmaWxlcy4KCk1vbiBKYW4gIDUgMTQ6MDM6NTkgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBMdWNhcyBCcmFzaWxpbm8gZml4aW5nIGFuIGluZGVudAoJICBwcm9ibGVtLgoKU3VuIEphbiAgNCAxODo1NDoyOSBNU1QgMjAwNCBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL25ld2FwaS54c2w6IGNoYW5nZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGZ1bmN0aW9uCglkZWNsYXJhdGlvbiB0byBpbXByb3ZlIHJlYWRhYmlsaXR5CgkqIGRvYy8qOiByZWJ1aWxkIGRvY3Mgd2l0aCBuZXcgc3R5bGVzaGVldAoKU3VuIEphbiAgNCAyMjo0NToxNCBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YmFyY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jLCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogYWRkZWQgYSByb3V0aW5lCgkgIHhtbFN0cm5jYXROZXcgdG8gY3JlYXRlIGEgbmV3IHN0cmluZyBmcm9tIDIgZnJhZ3MuCgkqIHRyZWUuYzogYWRkZWQgY29kZSB0byBjaGVjayBpZiBub2RlIGNvbnRlbnQgaXMgZnJvbQoJICBkaWN0aW9uYXJ5IGJlZm9yZSB0cnlpbmcgdG8gY2hhbmdlIG9yIGNvbmNhdGVuYXRlLgoKU3VuIEphbiAgNCAwODo1Nzo1MSBIS1QgMjAwNCBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbG1lbW9yeS5jOiBhcHBsaWVkIHN1Z2dlc3Rpb24gZnJvbSBNaWxvc2xhdiBUcm1hYyAoc2VlCgkgIEJ1ZyAxMzA0MTkpIGFuZCBlbGltaW5hdGVkIHhtbEluaXRNZW1vcnlEb25lLiAgTW9yZQoJICBpbXByb3ZlbWVudCBuZWVkZWQuCgkqIHhtbDItY29uZmlnLmluOiBhZGRlZCBhbiBhZGRpdGlvbmFsIGZsYWcgKC0tZXhlYy1wcmVmaXgpIHRvCgkgIGFsbG93IGxpYnJhcnkgZGlyZWN0b3J5IHRvIGJlIGRpZmZlcmVudCBmcm9tIGluY2x1ZGUgZGlyZWN0b3J5CgkgIChCdWcgMTI5NTU4KS4KCkZyaSBKYW4gIDIgMjE6MjI6MTggQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYzogYXBwbGllZCBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3Igc3RydWN0dXJlZCBlcnJvcgoJICByZXBvcnRpbmcuCgpGcmkgSmFuICAyIDIxOjAzOjE3IENFVCAyMDA0IERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oIHhtbHdyaXRlci5jOiBhcHBsaWVkIHRoZSBwYXRjaCBmcm9tCgkgIEx1Y2FzIEJyYXNpbGlubyB0byBhZGQgaW5kZW50YXRpb24gc3VwcG9ydCB0byB4bWxXcml0ZXIKCkZyaSBKYW4gIDIgMjI6NTg6MjkgSEtUIDIwMDQgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBwcm9ibGVtIHdpdGggInJlY3Vyc2l2ZSIgaW5jbHVkZSAoZmFsbGJhY2sKCSAgY29udGFpbnMgYW5vdGhlciBpbmNsdWRlIC0gQnVnIDEyOTk2OSkKCkZyaSBKYW4gIDIgMTE6NDA6MDYgQ0VUIDIwMDQgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jOiBmb3VuZCBhbmQgZml4ZWQgYSBidWcgbWlzYWxsb2NhdGluZyBzb21lIG5vbgoJICBibGFuayB0ZXh0IG5vZGUgc3RyaW5ncyBmcm9tIHRoZSBkaWN0aW9ubmFyeS4KCSogeG1sbWVtb3J5LmM6IGZpeGVkIGEgcHJvYmxlbSB3aXRoIHRoZSBtZW1vcnkgZGVidWcgbXV0ZXgKCSAgcmVsZWFzZS4KCldlZCBEZWMgMzEgMjI6MDI6MzcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBwcm9ibGVtIGNhdXNlZCBieSB3cm9uZyBkaWN0aW9uYXJ5CgkgIHJlZmVyZW5jZSBjb3VudCwgcmVwb3J0ZWQgb24gdGhlIGxpc3QgYnkgQ2hyaXN0b3BoZXIKCSAgR3JheWNlLgoKV2VkIERlYyAzMSAxNTo1NTo1NSBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHksIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBmaXhlZCBwcm9ibGVtCgkgIHBvaW50ZWQgb3V0IGJ5IFN06XBoYW5lIEJpZG91bCBvbiB0aGUgbGlzdC4KCSogeGluY2x1ZGUuYywgeHBvaW50ZXIuYywgeHBhdGguYywgaW5jbHVkZS9saWJ4bWwveHBvaW50ZXIuaDoKCSAgY29tcGxldGVkIG1vZGlmaWNhdGlvbnMgcmVxdWlyZWQgdG8gZml4IEJ1ZyAxMjk5NjcgKGF0IGxhc3QhKS4KCSAgTm93IHdhaXQgdG8gc2VlIGhvdyBsb25nIGJlZm9yZSBmdXJ0aGVyIHRyb3VibGUuLi4KClR1ZSBEZWMgMzAgMTY6MjY6MTMgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBwYXJzZXIuYywgeG1sbWVtb3J5LmMsIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiBGaXhlZAoJICBtZW1vcnkgbGVhayByZXBvcnRlZCBieSBEYXZlIEJlY2tldHQKCSogeG1sc2NoZW1hcy5jOiBSZW1vdmVkIHNwdXJpb3VzIGNvbW1lbnQgcmVwb3J0ZWQgb24gdGhlIG1haWxpbmcKCSAgbGlzdAoJKiB4aW5jbHVkZS5jLCB4cGF0aC5jLCB4cG9pbnRlci5jLCBsaWJ4bWwvaW5jbHVkZS94cG9pbnRlci5oOgoJICBGdXJ0aGVyIHdvcmsgb24gQnVnIDEyOTk2NyBjb25jZXJuaW5nIHhwb2ludGVyIHJhbmdlIGhhbmRsaW5nCgkgIGFuZCByYW5nZS10byBmdW5jdGlvbjsgbXVjaCBiZXR0ZXIsIGJ1dCBzdGlsbCBub3QgY29tcGxldGUKCk1vbiBEZWMgMjkgMTg6MDg6MDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogeG1sVmFsaWRhdGVFbGVtZW50IGNvdWxkIGNyYXNoIGZvciBlbGVtZW50IGhvbGRpbmcgYSAKCSAgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGJ1dCBub3QgaW4gYSBuYW1lc3BhY2UuIE9saXZlciBGaXNjaGVyIAoJICBwcm92aWRlZCB0aGUgZXhhbXBsZS4KCk1vbiBEZWMgMjkgMTE6Mjk6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBpc3N1ZSB2YWxpZGF0aW9uIHN0YXR1cyBvbiBzdGRlcnIsIG5vdCBzdGRvdXQgYXMgc3VnZ2VzdGVkCgkgIGJ5IFBhd2VsIFBhbHVjaGEKCSogcmVzdWx0L3JlbGF4bmcvKjogdGhpcyBjaGFuZ2Ugc2xpZ2h0bHkgYWxsIHRoZSBvdXRwdXQgZnJvbSBSTkcgCgkgIHJlZ3Jlc3Npb25zLgoKTW9uIERlYyAyOCAxMDo0NzozMiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHNjaGVtYXMuYzogZWRpdGVkIGEgY291cGxlIG9mIGNvbW1lbnRzIGluIGFjY29yZGFuY2Ugd2l0aAoJICBwb3N0aW5nIG9uIHRoZSBtYWlsaW5nIGxpc3QgKG5vIGxvZ2ljIGNoYW5nZSkKCSogeHBvaW50ZXIuYzogd29ya2luZyBvbiBCdWcgMTI5OTY3LCBhZGRlZCBjaGVjayBmb3IgTlVMTAoJICBub2Rlc2V0IHRvIHByZXZlbnQgY3Jhc2guICBGdXJ0aGVyIHdvcmsgcmVxdWlyZWQuCgkqIHhwYXRoLmM6IHdvcmtpbmcgb24gQnVnIDEyOTk2NywgYWRkZWQgY29kZSB0byBoYW5kbGUKCSAgWFBBVEhfTE9DQVRJT05TRVQgaW4gUkFOR0VUTyBjb2RlLCBhbHNvIGFkZGVkIGNvZGUgdG8KCSAgaGFuZGxlIGl0IGluIHhtbFhQYXRoRXZhbHVhdGVQcmVkaWNhdGVSZXN1bHQuICBGdXJ0aGVyCgkgIHdvcmsgcmVxdWlyZWQuCgpTYXQgRGVjIDI3IDEyOjMyOjU4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sc2NoZW1hcy5jOiBhZGRlZCB0ZXN0cyBmb3IgeHM6YWxsIHRvIGFzc3VyZSBtaW5PY2N1cnMKCSAgYW5kIG1heE9jY3VycyA8PSAxIChCdWcgMTMwMDIwKQoKU2F0IERlYyAyNyAwOTo1MzowNiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHJlZ2V4cC5jOiBmaXhlZCB4bWxGQVBhcnNlQ2hhclJhbmdlIGZvciBVbmljb2RlIHJhbmdlcwoJICB3aXRoIHBhdGNoIGZyb20gQ2hhcmxlcyBCb3plbWFuLgoKRnJpIERlYyAyNiAxNDowMzo0MSBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbHJlZ2V4cC5jOiBmaXhlZCBwcm9ibGVtIGNhdXNpbmcgc2VnZmF1bHQgb24gdmFsaWRhdGlvbiBlcnJvcgoJICBjb25kaXRpb24gKHJlcG9ydGVkIG9uIG1haWxpbmcgbGlzdCkKClRodSBEZWMgMjUgMjE6MTY6MjIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGVkIG1pc3NpbmcgZGljdGlvbmFyaWVzIGZvciBNZW1vcnkgYW5kIERvYwoJICBwYXJzZXIgY29udGV4dHMgKHByb2JsZW0gcmVwb3J0ZWQgb24gbWFpbGluZyBsaXN0KQoJKiBkb2MvYXBpYnVpbGQucHk6IHNtYWxsIGNoYW5nZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBsaW5lcwoJICBvbiBBUEkgZnVuY3Rpb25zIGxpc3QuICBJdCB3aWxsIHRha2UgZWZmZWN0IHRoZSBuZXh0IHRpbWUKCSAgdGhlIGRvY3MgYXJlIHJlYnVpbHQuCgpXZWQgRGVjIDI0IDEyOjU0OjI1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2NzIGFuZCBwcmVwYXJlZCBhIG5ldwoJICByZWxlYXNlIDIuNi40CgpXZWQgRGVjIDI0IDEyOjA3OjUyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxlZ2FjeS5jOiByZW1vdmUgZGVwcmVjYXRlZCB3YXJuaW5nIG9uIHN0YXJ0RWxlbWVudCgpCgpXZWQgRGVjIDI0IDEyOjA0OjM1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmMgcmVzdWx0L1hJbmNsdWRlL25vZGVzMi4qOiBYSW5jbHVkZSB4cG9pbnRlciBzdXBwb3J0CgkgIHdhcyBicm9rZW4gd2l0aCB0aGUgbmV3IG5hbWVzcGFjZS4gRml4ZXMgIzEyOTkzMgoKV2VkIERlYyAyNCAwMDoyOTozMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOiB0eXBlcyBtaWdodCBiZQoJICByZWRlZmluZWQgaW4gaW5jbHVkZXMsIHF1aWNrIGZpeCB0byBhbGxvdyB0aGlzIGJ1dCBsYWNrcyB0aGUgCgkgIGVxdWFsaXR5IG9mIHRoZSByZWRlZmluaXRpb24gdGVzdC4KClR1ZSBEZWMgMjMgMTU6MTQ6MzcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB2YWxpZC5jOiBmaXhlZCBidWcgY29uY2VybmluZyB2YWxpZGF0aW9uIHVzaW5nIGV4dGVybmFsCgkgIGR0ZCBvZiBlbGVtZW50IHdpdGggbXV0aXBsZSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zCgkgIChCdWcgMTI5ODIxKQoKVHVlIERlYyAyMyAxMTo0MTo0MiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRyZWUuYzogaW5oaWJpdGVkIHByb2R1Y3Rpb24gb2YgIihudWxsKToiIGluIHhtbEdldE5vZGVQYXRoCgkgIHdoZW4gbm9kZSBoYXMgZGVmYXVsdCBuYW1lc3BhY2UgKEJ1ZyAxMjk3MTApCgpUdWUgRGVjIDIzIDA5OjI5OjE0IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogc21hbGwgZW5oYW5jZW1lbnQgdG8geG1sWFBhdGhDbXBOb2RlcyB0byBhc3N1cmUKCSAgZG9jdW1lbnQgb3JkZXIgZm9yIGF0dHJpYnV0ZXMgaXMgcmV0YWluZWQgKEJ1ZyAxMjkzMzEpCgpNb24gRGVjIDIyIDE5OjA2OjE2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHhtbHJlYWRlci5jOiBjaGFuZ2UgeG1sUmVhZEZkKCkgeG1sQ3R4dFJlYWRGZCgpCgkgIHhtbFJlYWRlck5ld0ZkKCkgeG1sUmVhZGVyRm9yRmQoKSwgY2hhbmdlIHRob3NlIHRvIG5vdCBjbG9zZQoJICB0aGUgZmlsZSBkZXNjcmlwdG9yLiBVcGRhdGVkIHRoZSBjb21tZW50LCBzaG91bGQgY2xvc2UgIzEyOTY4MwoKTW9uIERlYyAyMiAwMDozNDowOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBhIHNlcmlvdXMgcHJvYmxlbSBpbiBYSW5jbHVkZSAjMTI5MDIxCgpTdW4gRGVjIDIxIDEzOjU5OjU0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBidWcgIzEyOTQ4OSwgcHJvcGFnYXRpb24gb2YgcGFyc2luZyBmbGFncyAKCSAgaW4gZW50aXRpZXMuCgkqIHBhcnNlci5jIHhtbHJlYWRlci5jOiBpbXByb3ZlZCB0aGUgY29tbWVudHMgb2YgcGFyc2luZyBvcHRpb25zCgpTdW4gRGVjIDIxIDE4OjE0OjA0IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtLCBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0sCgkgIGRvYy9NYWtlZmlsZS5hbTogYXBwbGllZCBmaXhlcyB0byBhbGxvdyBidWlsZCBmcm9tCgkgICdvdXRzaWRlJyBkaXJlY3RvcnkgKEJ1ZyAxMjkxNzIpCgpTYXQgRGVjIDIwIDE2OjQyOjA3IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiB0cmVlLmMgLSBhZGQgZXhwbGFuYXRpb24gb2YgbmFtZXNwYWNlIGluaGVyaXRhbmNlIHdoZW4KCW5zIGlzIE5VTEwgdG8geG1sTmV3Q2hpbGQgYW5kIHhtbE5ld1RleHRDaGlsZCBBUEkgZG9jCgpTYXQgRGVjIDIwIDE4OjE3OjI4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogdW5kaWQgbGFzdCBjaGFuZ2UgKG15CgkgIGJhZCkuICBQdXQgbmVjZXNzYXJ5IGZpeCBpbiBsaWJ4c2x0L2xpYmV4c2x0IGluc3RlYWQuCgkqIGluY2x1ZGUvbGlieG1sL0RPQ0JwYXJzZXIuaDogcHV0IHRlc3QgZm9yIF9fR0NDX18gb24KCSAgd2FybmluZyBkaXJlY3RpdmUgKEJ1ZyAxMjkxMDUpCgpTYXQgRGVjIDIwIDEwOjQ4OjM3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogZml4ZWQgeG1sWFBhdGhSZXR1cm5TdHJpbmcKCSAgdG8gY2F0ZXIgZm9yIE5VTEwgcG9pbnRlciAoYnVnIDEyOTU2MSkKCSogZ2xvYmFscy5jOiBhZGRlZCBjb21tZW50IHRvIHN1cHByZXNzIGRvY3VtZW50YXRpb24gd2FybmluZwoJKiBkb2MvYXBpYnVpbGQucHk6IGZpeGVkIHByb2JsZW0gd2hpY2ggY2F1c2VkIGxhc3QgQVBJY2h1bmt4eC5odG1sCgkgIHRvIGJlIGxvc3QuICBSZWJ1aWx0IGRvYy8qIChpbmNsdWRpbmcgYWRkaW5nIEFQSWNodW5rMjYuaHRtbCkKCkZyaSBEZWMgMTkgMTg6MjQ6MDIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IHRyeWluZyB0byBmaXggIzEyOTY5MiB4bWxUZXh0UmVhZGVyRXhwYW5kKCkgd2hlbgoJICB1c2luZyBhbiB4bWxSZWFkZXJXYWxrZXIoKQoKVGh1IERlYyAxOCAyMDoxMDozNCBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogdHJlZS5jOiBmaXggbWlzYy4gdHlwb3MgaW4gZG9jIGNvbW1lbnRzCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogZWxhYm9yYXRlIG9uIG1hY3JvIGRlZmluZSBkb2MgY29tbWVudHMKCSogZG9jLyo6IHJlYnVpbGQgZG9jcwoKV2VkIERlYyAxNyAxNjowNzozMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMvKjogZG9uJ3QgY2FsbCB0aGUgcmVzdWx0IGZpbGVzIC5vdXQgYnV0IC5yZXMgYXMKCSAgdGhlIE1ha2VmaWxlcyB0ZW5kIHRvIHRyeSBnZW5lcmF0aW5nIGJpbmFyaWVzIGZvciAub3V0IHRhcmdldHMuLi4KClR1ZSBEZWMgMTYgMjA6NTM6NTQgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9odG1sL2xpYnhtbC1wYXR0ZXJuLmh0bWw6IC0gY3ZzIGFkZCBBUEkgZG9jcyBmb3IgbmV3CglwYXR0ZXJuIHN0dWZmCgpUdWUgRGVjIDE2IDIwOjQwOjQwIE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiB0cmVlLmMKCSogZG9jLyo6CglFbGFib3JhdGUgaW4gZG9jdW1lbnRhdGlvbiBkaXNjdXNzaW9uIG9mIHhtbE5ld0NoaWxkCglhbmQgeG1sTmV3VGV4dENoaWxkLiBUaGFua3MgdG8gU3RldmUgTGVudGkgZm9yIHBvaW50aW5nCglvdXQgdGhlIHVzZWZ1bG5lc3Mgb2YgYSBtb3JlIGV4cGxpY2l0IGV4cGxhbmF0aW9uIG9mIHRoZQoJcmVzZXJ2ZWQgY2hhcmFjdGVyIGVzY2FwaW5nIGlzc3VlLgoKRnJpIERlYyAxMiAxNTo1NToxNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxjYXRhbG9nLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBTdGVmYW4gS29zdAoKVGh1IERlYyAxMSAxNToxNTozMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMvdGVzdFdyaXRlci5jOiBhcHBsaWVkIHNtYWxsIGZpeCBmcm9tIEx1Y2FzIEJyYXNpbGlubwoKVGh1IERlYyAxMSAxNDo1NToyMiBDRVQgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuKiB3aW4zMi9jb25maWd1cmUuanM6IEFkZGVkIHBhdHRlcm4gc3VwcG9ydAoKV2VkIERlYyAxMCAxNDoxMToyMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gZG9jLyogbGlieG1sLnNwZWMuaW46IHByZXBhcmluZyByZWxlYXNlIG9mCgkgIGxpYnhtbDItMi42LjMsIHVwZGF0ZWQgYW5kIHJlZ2VuZXJhdGVkIHRoZSBkb2NzLgoKV2VkIERlYyAxMCAxMTo0MzozMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgcGF0dGVybi5jOiByZW1vdmVkIHNvbWUgY29tcGlsYXRpb24gd2FybmluZ3MKCldlZCBEZWMgMTAgMTE6MTY6MjkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBmaXhpbmcgYnVnICMxMTkyNjQgeG1sbGludCBmYWlsaW5nIHRvIHJlcG9ydAoJICBzZXJpYWxpemF0aW9uIGVycm9ycyBpbiBzb21lIGNhc2VzLgoKVHVlIERlYyAgOSAyMzo1MDoyMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBmaXhlZCBhbiBYTUwgZW50aXRlcyBjb250ZW50IHNlcmlhbGl6YXRpb24gCgkgIHBvdGVudGlhbGx5IHRyaWdnZXJlZCBieSBYSW5jbHVkZSwgc2VlICMxMjY4MTcKClR1ZSBEZWMgIDkgMTY6MTI6NTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmM6IGFwcGxpZWQgdGhlIHBhdGNoIHRvIHhtbFRleHRXcml0ZXJTdGFydFBJKCkKCSAgc3VnZ2VzdGVkIGJ5IERhbmllbCBTY2h1bG1hbiBpbiAjMTI4MzEzCgpUdWUgRGVjICA5IDE1OjE4OjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogYW5vdGhlciBwYXRjaCBmcm9tIEtlbm5ldGggSGFsZXkKCSAgZm9yIE1pbmd3LCBjLmYuICMxMjg3ODcKClR1ZSBEZWMgIDkgMTU6MDc6MDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oOiBhcHBsaWVkIHBhdGNoIGZyb20gS2VubmV0aCBIYWxleQoJICBmb3IgY29tcGlsaW5nIG9uIE1pbmd3IHNlZSAjMTI4Nzg2CgpUdWUgRGVjICA5IDE0OjUyOjU5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogc29tZSBmbGFncyB3ZXJlIG5vdCBwYXNzZWQgZG93biBjb3JyZWN0bHkgYXMKCSAgcGFyc2luZyBvcHRpb25zLiBGaXhlcyAjMTI2ODA2CgpUdWUgRGVjICA5IDEyOjI5OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmMgeG1sbGludC5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3hpbmNsdWRlLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYXVnbWVudGVkIHRoZSBYSW5jbHVkZSBBUEkKCSAgdG8gYmUgYWJsZSB0byBwYXNzIFhNTCBwYXJzZXIgZmxhZ3MgZG93biB0byB0aGUgSW5jbHVzaW9uCgkgIHByb2Nlc3MuIEFsc28gcmVzeW5jaHJvbml6ZWQgd2l0aCB0aGUgTGFzdCBDYWxsIFczQyBXb3JraW5nCgkgIERyYWZ0IDEwIE5vdmVtYmVyIDIwMDMgZm9yIHRoZSB4cG9pbnRlciBhdHRyaWJ1dGUuCgkqIE1ha2VmaWxlLmFtIHRlc3QvWEluY2x1ZGUvZG9jcy9ub2Rlc1syM10ueG1sIAoJICByZXN1bHQvWEluY2x1ZGUvKjogYXVnbWVudGVkIHRoZSB0ZXN0cyBmb3IgdGhlIG5ldyBuYW1lc3BhY2UgYW5kCgkgIHRlc3RpbmcgdGhlIHhwb2ludGVyIGF0dHJpYnV0ZSwgY2hhbmdlZCB0aGUgd2F5IGVycm9yIG1lc3NhZ2VzCgkgIGFyZSB0ZXN0ZWQKCSogZG9jLyo6IHJlZ2VuZXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpNb24gRGVjICA4IDE4OjM4OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmM6IGZpbHRlciB3YXJuaW5nIG1lc3NhZ2VzIGlmIHRoZSBnbG9iYWwgc2V0dGluZyBibG9ja3MgdGhlbQoJKiB4aW5jbHVkZS5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3hpbmNsdWRlLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogdXBkYXRlZCB0aGUgY2hhbmdlIG9mIG5hbWVzcGFjZSBhdAoJICB0aGUgWEluY2x1ZGUgbGV2ZWwsIHJhaXNlIGEgd2FybmluZyBpZiB0aGUgb2xkIG9uZSBpcyBmb3VuZCwKCSAgYW5kIHNvbWUgY2xlYW51cAoKTW9uIERlYyAgOCAxMzowOTozOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHRlbnRhdGl2ZSBmaXggZm9yICMxMjYxMTcgY2hhcmFjdGVyIHJlZmVyZW5jZSBpbgoJICBhdHRyaWJ1dGVzIG91dHB1dCBwcm9ibGVtIGluIHNvbWUgY29ybmVyY2FzZS4KCk1vbiBEZWMgIDggMTE6MDg6NDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5weTogdHJpZWQgdG8gZml4IHRoZSBwcm9ibGVtcyByZXBvcnRlZCBpbiAKCSAgYnVnICMxMjY3MzUKCSogeHBhdGguYyBTQVgyLmMgZXJyb3IuYyBwYXJzZXIuYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6CgkgIGZpeGVkIGFnYWluIHNvbWUgcHJvYmxlbSB0cnlpbmcgdG8gdXNlIHRoZSBzdHJ1Y3R1cmVkIGVycm9yCgkgIGhhbmRsZXJzLCBjLmYuIGJ1ZyAjMTI2NzM1CgkqIHJlc3VsdC9WQy9FbGVtZW50VmFsaWQ6IHRpbnkgY2hhbmdlIGR1ZSB0byB0aGUgZml4CgpTdW4gRGVjICA3IDIyOjI3OjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmM6IGZpeGVkIF9feG1sUmFpc2VFcnJvciB0byB1c2Ugc3RydWN0dXJlZCBlcnJvciBoYW5kbGVycwoJICBkZWZpbmVkIGJ5IHhtbFNldFN0cnVjdHVyZWRFcnJvckZ1bmMoKSwgZml4ZXMgYnVnICMxMjYyMTEKClN1biBEZWMgIDcgMjA6MzA6NTMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGF0dGVtcHQgdG8gZml4ICMxMjYyMTEgLi4uIAoKRnJpIERlYyAgNSAxNzowNzoyOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXR0ZXJuLmMgeG1scmVhZGVyLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL3BhdHRlcm4uaAoJICBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogZml4ZWQgdGhlIHBhdHRlcm4gaW50ZXJmYWNlcwoJICBidXQgbm90IHlldCB0aGUgcGFyc2VyIHRvIGhhbmRsZSB0aGUgbmFtZXNwYWNlcy4KCSogZG9jL2V4YW1wbGVzL3JlYWRlcjMuYyBkb2MvKjogZml4ZWQgdGhlIGV4YW1wbGUsIHJlYnVpbHQgdGhlIGRvY3MuCgpGcmkgRGVjICA1IDE1OjQ5OjQ0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB4bWx3cml0ZXIuYyBkb2MvYXBpYnVpbGQucHkgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIAoJICBpbmNsdWRlL2xpYnhtbC9wYXR0ZXJuLmggaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaCBpbmNsdWRlL2xpYnhtbC94bWx3cml0ZXIuaDogY2xlYW51cAoJICB0aGUgbWFrZSByZWJ1aWxkIGluIGRvYywgdGhpcyBpbmNsdWRlIG5ldyBkaXJlY3RpdmUgdG8gc3RvcAoJICBkb2N1bWVudGF0aW9uIHdhcm5pbmdzCgkqIGRvYy8qIGRvYy9odG1sLyo6IHJlYnVpbHQgdGhlIGRvY3MKCSogcGF0dGVybi5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3BhdHRlcm4uaAoJICBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogYWRkaW5nIHhtbFRleHRSZWFkZXJQcmVzZXJ2ZVBhdHRlcm4oKQoJICB0byBzYXZlIG5vZGVzIHdoaWxlIHNjYW5uaW5nIHRoZSB0cmVlIHdpdGggdGhlIHJlYWRlciwgY2xlYW51cAoJICB0aGUgd2F5IGVsZW1lbnQgd2VyZSBmcmVlZCwgYW5kIHhtbFRleHRSZWFkZXJQcmVzZXJ2ZSgpCgkgIGltcGxlbWVudGF0aW9uLCB0aGUgQVBJIG1pZ2h0IGNoYW5nZSBmb3IgbmFtZXNwYWNlIGJpbmRpbmcgc3VwcG9ydAoJICB3aGVuIGNvbXBpbGluZyBwYXR0ZXJucy4KCSogZG9jL2V4YW1wbGVzLyo6IGFkZGVkIHJlYWRlcjMuYyBleHBvc2luZyB0aGUgeG1sVGV4dFJlYWRlclByZXNlcnZlKCkKClRodSBEZWMgIDQgMTU6MTA6NTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5weTogb29wcyBmb3Jnb3QgdG8gbW9kaWZ5L2NvbW1pdCB0aGUgbmV3IGNvZGUuCgpUaHUgRGVjICA0IDEzOjI5OjE5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWxfd3JhcC5oOgoJICBjbGVhbnVwIHRoZSBvdXRwdXQgYnVmZmVyIHN1cHBvcnQgdG8gYXQgbGVhc3QgZ2V0IHRoZSBiYXNpYwoJICB0byB3b3JrCgkqIHB5dGhvbi90ZXN0cy9vdXRidWYucHkgcHl0aG9uL3Rlc3RzL3NlcmlhbGl6ZS5weTogZml4ZXMgYW5kCgkgIGNsZWFudXAuCgkqIGluY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oOiBjbGVhbnVwCgpXZWQgRGVjICAzIDIxOjM4OjU2IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KCSogZG9jLyo6IGFkZCBXSVRIX1RSSU8gY29tbWVudCBzbyBpdCBzaG93cyB1cCBpbiB0aGUgZG9jcywgcmVidWlsZAoJICBkb2NzCgpXZWQgRGVjICAzIDEzOjEwOjA4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZy5oLmluIGNvbmZpZ3VyZS5pbiB4bWxyZWdleHAuYzogZml4IGJ1ZyAjMTI4NDAxIGFmZmVjdGluZwoJICByZWdleHAgcXVhbnRpZmllcnMKClR1ZSBEZWMgIDIgMjM6Mjk6NTYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGF0dGVybi5jIGluY2x1ZGUvbGlieG1sL3BhdHRlcm4uaDogYWRkaW5nIHRoZSBwYXR0ZXJuIG5vZGUKCSAgc2VsZWN0aW9uIGNvZGUuIEluaGVyaWVkIGluIHBhcnQgZnJvbSBsaWJ4c2x0IGJ1dCBzbWFsbGVyLgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBpbnRlZ3JhdGVkIHRoZSBwYXR0ZXJuIG1vZHVsZSwgbWFkZSBpdCBhIGNvbmZpZ3VyZSB0aW1lIG9wdGlvbgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tcGF0dGVybiB0byB0ZXN0IHdoZW4gZG9pbmcgLS1zdHJlYW0KClR1ZSBEZWMgIDIgMTE6MjU6MjUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIGEgcHJvYmxlbSBpbiB4bWxyZWFkZXIgdmFsaWRhdGlvbiB3aGVuCgkgIHN0cmVhbWluZyBleHBvc2VkIGJ5IHJlYWRlcjIgZXhhbXBsZS4KCk1vbiBEZWMgIDEgMjA6NDA6NTEgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbAoJKiBkb2MvZG9jcy5odG1sOgoJYWRkIHJlZmVyZW5jZSB0byB0aGUgQ29kZSBFeGFtcGxlcyBwYWdlIHRvIGRvY3MuaHRtbCBsaXN0CglvZiByZXNvdXJjZXMKCk1vbiBEZWMgIDEgMTI6MzA6MjggQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYiB3aW4zMi9jb25maWd1cmUuanM6IEFwcGxpZWQgdGhlIEJDQiBwYXRjaAoJICBmcm9tIEVyaWMKClN1biBOb3YgMzAgMjE6MzM6MzcgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGluY2x1ZGUvbGlieG1sL3hpbmNsdWRlLmgKCSogZG9jLyo6IEFkZCBjb21tZW50cyBmb3IgbWFjcm8gZGVmaW5pdGlvbnMgaW4geGluY2x1ZGUuaCBhbmQKCXJlYnVpbGQgdGhlIGRvY3MKClN1biBOb3YgMzAgMjE6MDY6MjkgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy9kb2NkZXNjci5kb2MKCVVwZGF0aW5nIFdpbGxpYW0ncyBleHBsYW5hdGlvbiBvZiBob3cgdG8gYnVpbGQgZG9jcywgCglyZWZsZWN0aW5nIERhbmllbCdzIG5ldyBkb2NzIGJ1aWxkIHN5c3RlbQoKU2F0IE5vdiAyOSAxODozODoyMiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhtbG1lbW9yeS5jOiBlbmhhbmNlZCBieSBhZGRpbmcgbXV0ZXggdG8gcHJvdGVjdCBnbG9iYWwKCSAgc3RydWN0dXJlcyBpbiBhIG11bHRpLXRocmVhZGluZyBlbnZpcm9ubWVudC4gIFRoaXMgZml4ZWQKCSAgc29tZSByYW5kb20gZXJyb3JzIG9uIHRoZSBUaHJlYWRzIHJlZ3Jlc3Npb24gdGVzdHMuCgpGcmkgTm92IDI4IDIxOjM5OjQ5IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sLmh0bWwgZG9jL3B5dGhvbi5odG1sOiBmaXggdHN0LnB5IHRleHQsIHdoaWNoIGRpZG4ndAoJICBpbXBvcnQgc3lzCgpGcmkgTm92IDI4IDE3OjI4OjQ3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYywgaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaDogRW5oYW5jZWQgdGhlIGhhbmRsaW5nIG9mCgkgIFVURi0xNiwgVVRGLTE2TEUgYW5kIFVURi0xNkJFIGVuY29kaW5ncy4gIE5vdyBVVEYtMTYgb3V0cHV0IGlzCgkgIGhhbmRsZWQgaW50ZXJuYWxseSBieSBkZWZhdWx0LCB3aXRoIHByb3BlciBCT00gYW5kIFVURi0xNkxFCgkgIGVuY29kaW5nLiAgTmF0aXZlIFVURi0xNkxFIGFuZCBVVEYtMTZCRSBlbmNvZGluZyB3aWxsIG5vdCBnZW5lcmF0ZQoJICBCT00gb24gb3V0cHV0LCBhbmQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZWQgb24gaW5wdXQuCgkqIHRlc3QvdXRmMTZsZWJvbS54bWwsIHRlc3QvdXRmMTZiZWJvbS54bWwsIHJlc3VsdC91dGYxNj9lYm9tKjoKCSAgYWRkZWQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgYWJvdmUuCgpUaHUgTm92IDI3IDE5OjI1OjEwIENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS4qIHdpbjMyL2NvbmZpZ3VyZS5qczogTW9kaWZpZWQgdG8gYWxsb3cgY29leGlzdGVudCAKCSAgYnVpbGQgd2l0aCBhbGwgY29tcGlsZXJzLiBBZGRlZCBDLVJ1bnRpbWUgb3B0aW9uIGZvciBNU1ZDLiBJbmNsdWRlZAoJICB4bWxXcml0ZXIuCgkqIHhtbHdyaXRlci5jOiBBZGRlZCBJTl9MSUJYTUwgbWFjcm8KCldlZCBOb3YgMjYgMjE6NTQ6MDEgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYjogYXBwbGllZCBwYXRjaCBmcm9tIEVyaWMKCldlZCBOb3YgMjYgMjE6MzM6MTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBzdGVmYW4gb24gSVJDIHBvaW50ZWQgb3V0IHRoYXQgWE1MX0dFVF9MSU5FCgkgIGlzIGJyb2tlbiBvbiAyLjYueAoKVHVlIE5vdiAyNSAxODozOTo0NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBmaXhlZCAjMTI3ODc3LCBuZXZlciBvdXRwdXQgJnF1b3Q7IGluIGVsZW1lbnQgY29udGVudAoJKiByZXN1bHQvaXNvbGF0MyByZXN1bHQvc2xhc2hkb3QxNi54bWwgcmVzdWx0L25vZW50L2lzb2xhdDMKCSAgcmVzdWx0L25vZW50L3NsYXNoZG90MTYueG1sIHJlc3VsdC92YWxpZC9SRUMteG1sLTE5OTgwMjEwLnhtbAoJICByZXN1bHQvdmFsaWQvaW5kZXgueG1sIHJlc3VsdC92YWxpZC94bGluay54bWw6IHRoaXMgY2hhbmdlcyB0aGUKCSAgb3V0cHV0IG9mIGEgZmV3IHRlc3RzCgpUdWUgTm92IDI1IDE2OjM2OjIxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oCgkgIHRlc3RTY2hlbWFzLmMgeG1sc2NoZW1hcy5jOiBhZGRlZCB4c2Q6aW5jbHVkZSBzdXBwb3J0LCBmaXhlZAoJICB0ZXN0U2NoZW1hcyBiZWhhdmlvdXIgd2hlbiBhIHNjaGVtYXMgZmFpbGVkIHRvIHBhcnNlLgoJKiB0ZXN0L3NjaGVtYXMvdmR2LSogcmVzdWx0L3NjaGVtYXMvdmR2LWZpcnN0NV8wXzAqOiBhZGRlZCBvbmUKCSAgdGVzdCBmb3IgeHNkOmluY2x1ZGUgZnJvbSBFcmljIFZhbiBkZXIgVmxpc3QKClR1ZSBOb3YgMjUgMDg6MTg6MTIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHN3YXBwZWQgdGhlIGF0dHJpYnV0ZSBkZWZhdWx0aW5nIGFuZCBhdHRyaWJ1dGUgY2hlY2tpbmcKCSAgcGFydHMgb2YgcGFyc2luZyBhIG5ldyBlbGVtZW50IHN0YXJ0LCBmaXhlcyBidWcgIzEyNzc3MgoJKiByZXN1bHQvdmFsaWQvMTI3NzcyLiogdGVzdC92YWxpZC8xMjc3NzIueG1sCgkgIHRlc3QvdmFsaWQvZHRkcy8xMjc3NzIuZHRkOiBhZGRlZCB0aGUgZXhhbXBsZSBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0cwoKVHVlIE5vdiAyNSAwODowMDoxNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogbW92ZWQgeG1sQ2xlYW51cFRocmVhZHMoKSB0byB0aGUgZW5kIG9mIHhtbENsZWFudXBQYXJzZXIoKQoJICB0byBhdm9pZCBidWcgIzEyNzg1MQoKTW9uIE5vdiAyNCAxNToyNjoyMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYzogZml4aW5nIHNvbWUgTmVnYXRpdmUgQ2hhcmFjdGVyIEdyb3VwIGFuZAoJICBDaGFyYWN0ZXIgQ2xhc3MgU3VidHJhY3Rpb24gaGFuZGxpbmcuCgpNb24gTm92IDI0IDE0OjAxOjU3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYzogbW9yZSBYTUwgU2NoZW1hcyBmaXhlcyBiYXNlZAoJICBvbiBFcmljIHZhbiBkZXIgVmxpc3QgZXhhbXBsZXMKCSogcmVzdWx0L3NjaGVtYXMvdmR2LWZpcnN0NCogdGVzdC9zY2hlbWFzL3Zkdi1maXJzdDQqOgoJICBhZGRlZCByZWdyZXNzaW9uIHRlc3RzCgkqIGRvYy9leGFtcGxlcy9NYWtlZmlsZS5hbSBkb2MvZXhhbXBsZXMvaW5kZXgucHk6IGRvIG5vdAoJICByZWdlbmVyYXRlIHRoZSBpbmRleCBvbiBtYWtlIGFsbCB0YXJnZXQsIGJ1dCBvbmx5IG9uCgkgIG1ha2UgcmVidWlsZCB0byBhdm9pZCB0cm91Ymxlcy4KClNhdCBOb3YgMjIgMjE6MzU6NDIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmgKCSAgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOiBsb3Qgb2YgYnVnIGZpeGVzLCBjbGVhbnVwLAoJICBzdGFydGluZyB0byBhZGQgcHJvcGVyIG5hbWVzcGFjZSBzdXBwb3J0IHRvby4KCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgYSBudW1iZXIgb2YgdGVzdHMKCSAgZml4ZWQgdGhlIHJlc3VsdCBmcm9tIHNvbWUgcmVncmVzc2lvbiB0ZXN0cyB0b28uCgpGcmkgTm92IDIxIDIwOjUwOjU5IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sLmh0bWwsIGRvY3MuaHRtbDogcmVtb3ZlIHJlZmVyZW5jZSB0byBndGstZG9jIG5vdyB0aGF0CglEYW5pZWwgaGFzIHJlbW92ZWQgaXQsIGZpeCBsaW5rIHRvIEdlb3JnZSdzIElCTSBhcnRpY2xlLCBvdGhlcgoJbWlub3IgZWRpdHMKCkZyaSBOb3YgMjEgMDE6MjY6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gUm9iZXJ0IFN0ZXBhbmVrIHRvIHN0YXJ0IAoJICBpbXBvcnQgb3Mgc2NoZW1hcyBzdXBwb3J0LCBjbGVhbmVkIHVwIHN0dWZmIGFuZCB0aGUgcGF0Y2guCgkqIHRlc3Qvc2NoZW1hcy9pbXBvcnQwXzAuKiByZXN1bHQvc2NoZW1hcy9pbXBvcnQwXzBfMCo6IGFkZGVkIHRlc3QKCSAgdG8gcmVncmVzc2lvbiwgZml4ZWQgYSBmZXcgcmVncmVzc2lvbnMgdG9vLgoKVGh1IE5vdiAyMCAyMjo1ODowMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGFwcGxpZWQgdHdvIHBhcnNpbmcgZml4ZXMgZnJvbSBKYW1lcyBCdXJzYQoKVGh1IE5vdiAyMCAxOToyMDo0NiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMvKjogYWRkZWQgdHdvIHhtbFJlYWRlciBleGFtcGxlcwoJKiB4bWxyZWFkZXIuYzogY2xlYW5lZCB1cCBzb21lIGJ1Z3MgaW4gdGhlIHByb2Nlc3MKClRodSBOb3YgMjAgMTI6NTQ6MzAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmMgaW5jbHVkZS9saWJ4bWwveG1sd3JpdGVyLmg6IGFwcGxpZWQgcGF0Y2ggZnJvbQoJICBBbGZyZWQgTWlja2F1dHNjaCwgYnVnZml4ZXMgYW5kIGNvbW1lbnRzCgkqIGRvYy9leGFtcGxlcy8qOiBhZGRlZCBoaXMgdGVzdCBhcyB0aGUgeG1sV3JpdGVyIGV4YW1wbGUKCSogZG9jL2h0bWwvIGRvYy8qLmh0bWw6IHRoaXMgcmVzdWx0ZWQgaW4gc29tZSBpbXByb3ZlbWVudHMKCSogaW5jbHVkZS9saWJ4bWwvaGFzaC5oOiBmaXhlZCBhbiBpbmNsdXNpb24gcHJvYmxlbSB3aGVuCgkgIDxsaWJ4bWwvaGFzaC5oPiB3YXNuJ3QgcHJlY2VlZGVkIGJ5IDx4bWwvcGFyc2VyLmg+CgpXZWQgTm92IDE5IDE3OjE5OjM1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZpeCBhbiBlcnJvciBtZXNzYWdlCgkqIGRvYy9leGFtcGxlcy8qOiBhZGRlZCB0cmVlMiBleGFtcGxlIGZyb20gTHVjYXMgQnJhc2lsaW5vCgpXZWQgTm92IDE5IDE3OjUwOjQ3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL25ld2FwaS54c2w6IGltcHJvdmUgdGhlIHNvcnQgc2VxdWVuY2UgZm9yIHBhZ2UgY29udGVudAoJKiBkb2MvaHRtbC8qLmh0bWw6IHJlZ2VuZXJhdGUgdGhlIHdlYiBwYWdlcwoKV2VkIE5vdiAxOSAwMDo0ODo1NiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogZG8gbm90IHBhY2thZ2UgY3ZzIHZlcnNpb25pbmcgdGVtcCBmaWxlcy4KCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL25ld2FwaS54c2w6IG1vcmUgY2xlYW51cCwKCSAgc2xpZ2h0bHkgaW1wcm92ZWQgdGhlIEFQSSB4bWwgZm9ybWF0LCBmaXhlZCBhIGxvdCBvZiBzbWFsbAoJICByZW5kZXJpbmcgcHJvYmxlbXMKCSogZG9jL2h0bWwvbGlieG1sKi5odG1sOiByZWJ1aWx0CgpUdWUgTm92IDE4IDIxOjUxOjE1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sLyouaCBpbmNsdWRlL2xpYnhtbC8qLmguaW46IG1vZGlmaWVkIHRoZSBmaWxlCgkgIGhlYWRlciB0byBhZGQgbW9yZSBpbmZvcm1hdGlvbnMsIHBhaW5mdWwuLi4KCSogZ2VuQ2hSYW5nZXMucHkgZ2VuVW5pY29kZS5weTogdXBkYXRlZCB0byBnZW5lcmF0ZSBzYWlkIGNoYW5nZXMKCSAgaW4gaGVhZGVycwoJKiBkb2MvYXBpYnVpbGQucHk6IGV4dHJhY3QgaGVhZGVycywgYWRkIHRoZW0gdG8gbGlieG1sMi1hcGkueG1sCgkqICouaHRtbCAqLnhzbCAqLnhtbDogdXBkYXRlZCB0aGUgc3R5bGVzaGVldHMgdG8gZmxhZyBnZXByZWNhdGVkCgkgIEFQSXMgbW9kdWxlcy4gVXBkYXRlZCB0aGUgc3R5bGVzaGVldHMsIHNvbWUgY2xlYW51cHMsIHJlZ2VuZXJhdGVkCgkqIGRvYy9odG1sLyouaHRtbDogcmVnZW5lcmF0ZWQgYWRkZWQgYmFjayBib29rMSBhbmQgbGlieG1sLWxpYi5odG1sCgpUdWUgTm92IDE4IDE0OjQzOjE2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MvKi54c2wgZG9jLyouaHRtbCBkb2MvYXBpYnVpbGQucHk6IGNsZWFuZWQgdXAKCSAgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gcmVtb3ZlIGFsbCByZW1haW5zIGZyb20gdGhlIG9sZCBndGstZG9jCgkgIGluaGVyaXRlZCwgbGlieG1sMi1yZWZzLnhtbCBpcyBub3cgZ2VuZXJhdGVkIGJ5IGFwaWJ1aWxkLnB5LCB0aGUKCSAgc3R5bGVzaGVldHMgaGF2ZSBiZWVuIGltcHJvdmVkLCBhbmQgdGhlIEFQSSpodG1sIG5vdyBnZW5lcmF0ZWQKCSAgYXJlIFhIVE1MMSB2YWxpZCB0b28KClR1ZSBOb3YgMTggMTQ6Mjg6MzIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8bW1tLmNvbS5oaz4KCgkqIGdlbkNoUmFuZ2VzLnB5LCBjaHZhbGlkLmMsIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaDogbWlub3IKCSAgZW5oYW5jZW1lbnQgdG8gcHJldmVudCBjb21tZW50IHdpdGggdW5yZWZlcmVuY2VkIHZhcmlhYmxlLgoJKiB0aHJlYWRzLmMgeG1scmVhZGVyLmMgeG1sd3JpdGVyLmM6IGVkaXRlZCBzb21lIGNvbW1lbnRzIHRvCgkgIGltcHJvdmUgYXV0by1nZW5lcmF0aW9uIG9mIGRvY3VtZW50YXRpb24KCSogYXBpYnVpbGQucHk6IG1pbm9yIGNoYW5nZSB0byBhbiBlcnJvciBtZXNzYWdlCgpNb24gTm92IDE3IDE3OjU1OjUxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9hcGlidWlsZC5weSBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9uZXdhcGkueHNsOiBtb3JlIGNsZWFudXAsCgkgIGltcHJvdmluZyBuYXZpZ2F0aW9uCgkqIGRvYy9odG1sLyouaHRtbDogdXBkYXRlZCB0aGUgcmVzdWx0CgpNb24gTm92IDE3IDE0OjU0OjM4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvbmV3YXBpLnhzbDoKCSAgaW1wcm92ZW1lbnQgb2YgdGhlIHN0eWxlc2hlZXRzLCBmaXhlZCBhIEFQSSBnZW5lcmF0aW9uIHByb2JsZW0sCgkgIHN3aXRjaGVkIHRoZSBzdHlsZXNoZWV0IGFuZCBNYWtlZmlsZSB0byBidWlsZCB0aGUgSFRNTCBvdXRwdXQuCgkqIGRvYy9odG1sLyouaHRtbDogY29tcGxldGUgdXBkYXRlLCBkaXRjaGVkIHNvbWUgb2xkIGZpbGVzLCBtaWdodAoJICBpbnRyb2R1Y2Ugc29tZSBicmVha2FnZS4uLgoKTW9uIE5vdiAxNyAxMjo1MDoyOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbmV3YXBpLnhzbDogbG90IG9mIGltcHJvdmVtZW50cywgdGhpcyBzdGFydHMgbG9va2luZyBnb29kCgkgIGVub3VnaCB0byBiZSB1c2FibGUuCgpNb24gTm92IDE3IDAwOjU4OjA5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9uZXdhcGkueHNsOiBzdHlsZXNoZWV0IHRvIGJ1aWxkIEhUTUwgcGFnZXMgZnJvbSB0aGUKCSAgQVBJIFhNTCBkZXNjcmlwdGlvbiwgV29yayBpbiBQcm9ncmVzcwoKU3VuIE5vdiAxNiAxNjowMzoyNCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGZpeGVkIGJ1ZyAxMjY5NzYgKHN0cmluZyAhPSBlbXB0eSBub2Rlc2V0CgkgIHNob3VsZCBiZSBmYWxzZSkKClN1biBOb3YgMTYgMTQ6MDA6MDggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvaHRtbC8qLmh0bWw6IEZpbmFsbHkgLSBmb3VuZCB0aGUgcHJvYmxlbSB3aXRoIHRoZQoJICBwYWdlIGdlbmVyYXRpb24gKFhNTFBVQkZVTiBub3QgcmVjb2duaXplZCBieSBndGtkb2MpLgoJICBSZS1jcmVhdGVkIHRoZSBwYWdlcyB1c2luZyBhIHRlbXBvcmFyeSB2ZXJzaW9uIG9mCgkgIGluY2x1ZGUvbGlieG1sLyouaC4KCSogdGVzdE9PTWxpYi5jLGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmgsCgkgIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCxpbmNsdWRlL2xpYnhtbC92YWxpZC5oLAoJICBpbmNsdWRlL2xpYnhtbC94bGluay5oLGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLAoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbiwKCSAgaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDogbWlub3IgZWRpdCBvZiBjb21tZW50cwoJICB0byBoZWxwIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24KCSogZG9jL2RvY2Rlc2NyLmRvYzogc21hbGwgZWxhYm9yYXRpb24KCSogZG9jL2V4YW1wbGVzL3Rlc3QxLmMsZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtOiByZS1jb21taXQKCSAgKG1lc3NlZCB1cCBvbiBsYXN0IHRyeSkKCSogeG1scmVhZGVyLmM6IG1pbm9yIGNoYW5nZSB0byBjbGVhciB3YXJuaW5nLgoKU2F0IE5vdiAxNSAxOToyMDozMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBDb3B5cmlnaHQ6IGZpeGVkIHNvbWUgd29yZGluZwoJKiBsaWJ4bWwuc3BlYy5pbjogbWFrZSBzdXJlIGRvYy9leGFtcGxlcyBpcyBwYWNrYWdlZAoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmggdmFsaWQuYyB4bWxyZWFkZXIuYzogZml4ZWQgdGhlIHJlYWxseQoJICBhbm5veWluZyBwcm9ibGVtIGFib3V0IHhtbFJlbW92ZUlEIGFuZCB4bWxSZWFkZXIgc3RyZWFtaW5nLgoJICBUaGluZyBsb29rcyBmaXhlZCBub3csIGhhZCB0byBhZGQgYSBkb2MgcmVmZXJlbmNlIHRvIHRoZQoJICB4bWxJRCBzdHJ1Y3R1cmUgdGhvdWdoLi4uCgpTYXQgTm92IDE1IDA5OjUzOjM2IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvZG9jZGVzY3IuZG9jOiBhZGRlZCBkZXNjcmlwdGlvbiBvZiBtYW4gcGFnZSBidWlsZGluZwoKU2F0IE5vdiAxNSAxOTowODoyMiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9odG1sL2xpYnhtbC1jaHZhbGlkLmh0bWwsIGRvYy9odG1sL2xpYnhtbC1kaWN0Lmh0bWwsCgkgIGRvYy9odG1sL2xpYnhtbC1saXN0Lmh0bWwsIGRvYy9odG1sL2xpYnhtbC10ZXN0T09NbGliLmh0bWwsCgkgIGRvYy9odG1sL2xpYnhtbC13aW5jZWNvbXBhdCwgZG9jL2h0bWwvd2luc29ja2NvbXBhdC5odG1sLAoJICBkb2MvaHRtbC9saWJ4bWwteG1sZXhwb3J0cy5odG1sLCBkb2MvaHRtbC9saWJ4bWwteG1sdmVyc2lvbi5odG1sLAoJICBkb2MvaHRtbC9saWJ4bWwteG1sd2luMzJ2ZXJzaW9uLmh0bWwsIGRvYy9odG1sL2xpYnhtbC14bWx3cml0ZXIuaHRtbDoKCSAgYWRkZWQgbWlzc2luZyBwYWdlcyBmb3IgdGhlIHdlYnNpdGUuCgpTYXQgTm92IDE1IDE4OjIzOjQ4IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL01ha2VmaWxlLmFtIGRvYy8qLmh0bWwgZG9jL2h0bWwvKi5odG1sOiByZWJ1aWx0IHRoZQoJICBnZW5lcmF0ZWQgcGFnZXMgKGFnYWluKSwgbWFudWFsbHkgcmVzdG9yZWQgZG9jL2h0bWwvaW5kZXguaHRtbAoJICBhbmQgbWFudWFsbHkgZWRpdGVkIGdlbmVyYXRlZCBmaWxlIGRvYy9nbm9tZS14bWwueG1sIHRvIHB1dAoJICBpbiBhcHByb3ByaWF0ZSBoZWFkaW5ncy4KCSogZG9jL2RvY2Rlc2NyLmRvYzogbmV3IGZpbGUgdG8gZGVzY3JpYmUgZGV0YWlscyBvZiB0aGUKCSAgZG9jdW1lbnQgZ2VuZXJhdGlvbiAoaGVscHMgbXkgbWVtb3J5IGZvciB0aGUgbmV4dCB0aW1lKQoJKiBnZW5DaFJhbmdlcy5weSxjaHZhbGlkLmMsaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oOiBtaW5vcgoJICBlbmhhbmNlbWVudCB0byBwbGVhc2UgdGhlIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24uCgpGcmkgTm92IDE0IDIzOjQ3OjMxIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY2F0YWxvZy5jLHJlbGF4bmcuYyx0ZXN0QXV0b21hdGEuYyx4cG9pbnRlci5jLGdlbkNoUmFuZ2VzLnB5LAoJICBjaHZhbGlkLmMsaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oLGRvYy9leGFtcGxlcy90ZXN0MS5jOgoJICBtaW5vciBlcnJvciBjbGVhbnVwIGZvciBnY2MtMy4zLlsxMl0gY29tcGlsYXRpb24gd2FybmluZ3MuCgpGcmkgTm92IDE0IDE1OjA4OjEzIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdHJlZS5jOiBtaW5vciBjaGFuZ2VzIHRvIHNvbWUgY29tbWVudHMKCSogZG9jLyouaHRtbDogcmVidWlsdCB0aGUgZ2VuZXJhdGVkIEhUTUwgcGFnZXMgZm9yIGNoYW5nZXMKCSAgZnJvbSBqZmxlY2sgKGJ1ZyAxMjY5NDUpCgpUaHUgTm92IDEzIDEyOjQ0OjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9leGFtcGxlcy8qOiBhZGRlZCBEb2RqaSdzIGV4YW1wbGUsIGFkZGVkIG91dHB1dCBoYW5kbGluZwoKVGh1IE5vdiAxMyAxMTozNTozNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZXhhbXBsZXMvKjogYWRkZWQgQWxla3NleSBYUGF0aCBleGFtcGxlLCBmaXhlZCBidWdzCgkgIGluIHRoZSBpbmRleGVyCgpXZWQgTm92IDEyIDIzOjQ4OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qOiBpbnRlZ3JhdGluZyB0aGUgZXhhbXBsZXMgaW4gdGhlIG5hdmlnYXRpb24gbWVudXMKCSogZG9jL2V4YW1wbGVzLyo6IGFkZGVkIG1ha2UgdGVzdHMsIHVwZGF0ZWQgdGhlIG5hdmlnYXRpb24sCgkgIGFkZGVkIGEgbmV3IHRlc3QsIGNsZWFudXBzLCB1cGRhdGVzLgoKV2VkIE5vdiAxMiAxNzo1MDozNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKi5odG1sOiByZWJ1aWx0IHRoZSBnZW5lcmF0ZWQgSFRNTCBwYWdlcwoJKiBkb2MvZXhhbXBsZXMvKjogdXBkYXRlZCB0aGUgc3R5bGVzaGVldHMsIGFkZGVkIGEgc3lub3BzaXMsCgkgIE1ha2VmaWxlLmFtIGlzIG5vdyBnZW5lcmF0ZWQgYnkgaW5kZXgucHkKCldlZCBOb3YgMTIgMDE6Mzg6MTYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3NpdGUueHNsIGRvYy9leGFtcGxlcy9NYWtlZmlsZS5hbSBkb2MvZXhhbXBsZXMvaW5kZXguaHRtbDoKCSAgYWRkZWQgYXV0b2dlbmVyYXRpb24gb2YgYSB3ZWIgcGFnZSBmb3IgdGhlIGV4YW1wbGVzCgkqIGRvYy9leGFtcGxlcy9leGFtcGxlMS5jIGRvYy9leGFtcGxlcy8uY3ZzaWdub3JlCgkgIGRvYy9leGFtcGxlcy9leGFtcGxlcy54bWwgZG9jL2V4YW1wbGVzL2luZGV4LnB5OiB1cGRhdGVkIHRoZQoJICBpbmZvcm1hdGlvbnMgZXh0cmFjdGVkLCBpbXByb3ZlZCB0aGUgZm9ybWF0IGFuZCBpbmRleGluZy4KClR1ZSBOb3YgMTEgMjI6MDg6NTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steGluY2x1ZGUtdGVzdC1zdWl0ZS5weTogbGVzcyB2ZXJib3NlIG9uIGRpZmZlcmVuY2UKCSogbGlieG1sLnNwZWMuaW46IGNsZWFudXAKCSogcGFyc2VyLmM6IGZpeGVkIHhtbENsZWFudXBQYXJzZXIoKSBkb2MKCSogZG9jL01ha2VmaWxlLmFtIGRvYy9hcGlidWlsZC5weSBkb2MvbGlieG1sMi1hcGkueG1sCgkgIGRvYy9leGFtcGxlcy9NYWtlZmlsZS5hbSBkb2MvZXhhbXBsZXMvZXhhbXBsZTEuYyAKCSAgZG9jL2V4YW1wbGVzL2V4YW1wbGVzLnhtbCBkb2MvZXhhbXBsZXMvaW5kZXgucHkKCSAgZG9jL2V4YW1wbGVzL3Rlc3QxLnhtbDogd29yayBvbiBhZGRpbmcgQyBleGFtcGxlcyBhbmQKCSAgZ2VuZXJhdGluZyBhdXRvbWF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhvc2UuIGV4YW1wbGVzLnhtbAoJICBpcyBhdXRvZ2VuZXJhdGVkIGRlc2NyaWJpbmcgdGhlIGV4YW1wbGVzLgoJKiBleGFtcGxlL01ha2VmaWxlLmFtOiBjbGVhbnVwCgpNb24gTm92IDEwIDIzOjQ3OjAzIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZ2VuVW5pY29kZS5weSwgeG1sdW5pY29kZS5jLCBpbmNsdWRlL2xpYnhtbC94bWx1bmljb2RlLmg6CgkgIGZpeGVkIG1pc3NpbmcgJy0nIGluIGJsb2NrIG5hbWVzLCBlbmhhbmNlZCB0aGUgaGFjayBmb3IKCSAgQUJJIGFsaWFzaW5nLgoKU3VuIE5vdiAgOSAyMDoyODoyMSBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGdlblVuaWNvZGUucHksIHhtbHVuaWNvZGUuYywgaW5jbHVkZS9saWJ4bWwveG1sdW5pY29kZS5oLAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogZW5oYW5jZWQgZm9yIHJhbmdlIGNoZWNraW5nLAoJICB1cGRhdGVkIHRvIFVuaWNvZGUgdmVyc2lvbiA0LjAuMSAoQVBJIGRvY3MgYWxzbyB1cGRhdGVkKQoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBtaW5vciBjaGFuZ2UgdG8gZml4IGEgd2FybmluZwoKV2VkIE5vdiAgNSAyMzo0NjozNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYXBwbHkgZml4IGZyb20gS2FybCBFaWNod2FsZGVyIGZvciBzY3JpcHQgcGF0aAoKV2VkIE5vdiAgNSAxMDo0OToyMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYXJrIFZha29jIHRvIHNpbXBsaWZ5CgkgIGhpcyB3b3JrIGZyb20gQ1ZTIGNoZWNrb3V0cy4KClR1ZSBOb3YgIDQgMjE6MTY6NDcgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxyZWFkZXIuaHRtbDogbWlub3IgY2xlYW51cHMKClR1ZSBOb3YgIDQgMTU6NTI6MjggUFNUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IGNoYW5nZWQgbWFjcm8gQVRUUklCVVRFX1VOVVNFRAoJICBmb3IgZ2NjIHNvIHRoYXQsIGlmIHVuZGVmaW5lZCwgaXQncyBkZWZpbmVkIGFzCgkgIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCgpUdWUgTm92ICA0IDE1OjI4OjA3IFBTVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogc21hbGwgZW5oYW5jZW1lbnQgdG8gYXNzdXJlIEFUVFJJQlVURV9VTlVTRUQKCSAgYXBwZWFycyBhZnRlciB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24uCgkqIHZhbGlkLmM6IHRyaXZpYWwgY2hhbmdlIHRvIGVsaW1pbmF0ZSBhIHdhcm5pbmcgbWVzc2FnZQoKVHVlIE5vdiAgNCAxMToyNDowNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUyBkb2MvKjogcHJlcGFyaW5nIHJlbGVhc2UgMi42LjIsIHVwZGF0ZWQgYW5kCgkgIHJlYnVpbHQgdGhlIGRvY3MKClR1ZSBOb3YgIDQgMDk6Mzg6NDYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBjaGFuZ2UgLS1odG1sIHRvIG1ha2Ugc3VyZSB3ZSB1c2UgdGhlIEhUTUwgc2VyaWFsaXphdGlvbgoJICBydWxlIGJ5IGRlZmF1bHQgd2hlbiBIVE1MIHBhcnNlciBpcyB1c2VkLCBhZGQgLS14bWxvdXQgdG8gYWxsb3cgdG8KCSAgZm9yY2UgdGhlIFhNTCBzZXJpYWxpemVyIG9uIEhUTUwuCgkqIEhUTUx0cmVlLmM6IHVnbHkgdHdlYWsgdG8gZml4IHRoZSBvdXRwdXQgb24gPHA+IGVsZW1lbnQgYW5kIAoJICBzb2x2ZSAjMTI1MDkzCgkqIHJlc3VsdC9IVE1MLyo6IHRoaXMgY2hhbmdlcyB0aGUgb3V0cHV0IG9mIHNvbWUgdGVzdHMKCk1vbiBOb3YgIDMgMTc6NTE6MjggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgYnVnICMxMjU4MTIsIGFib3V0IFhQb2ludGVyIGluIFhJbmNsdWRlIAoJICBmYWlsaW5nIGJ1dCBub3QgcmV0dXJuaW5nIGFuIGVycm9yLgoKTW9uIE5vdiAgMyAxNzoxODoyMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhlZCBidWcgIzEyNTgxMSByZWxhdGVkIHRvIERURCBwb3N0IHZhbGlkYXRpb24KCSAgd2hlcmUgdGhlIERURCBkb2Vzbid0IHBlcnRhaW4gdG8gYSBkb2N1bWVudC4KCk1vbiBOb3YgIDMgMTU6MjU6NTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaDogaW1wbGVtZW50ZWQKCSAgdGhlIFhNTF9QQVJTRV9OT05FVCBwYXJzZXIgb3B0aW9uLgoJKiB4bWxsaW50LmM6IGNvbnZlcnRlZCB4bWxsaW50LmMgdG8gdXNlIHRoZSBvcHRpb24gaW5zdGVhZCBvZiAKCSAgcmVseWluZyBvbiB0aGUgZ2xvYmFsIHJlc29sdmVyIHZhcmlhYmxlLgoKTW9uIE5vdiAgMyAxMzoyNjozMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3hpbmNsdWRlLmg6IGFkZGluZyBYSW5jbHVkZQoJICBzdXBwb3J0IHRvIHRoZSByZWFkZXIgaW50ZXJmYWNlLiBMb3Qgb2YgdGVzdGluZyBvZiB0aGUgd2Fsa2VyLAoJICB2YXJpb3VzIGJ1ZyBmaXhlcy4KCSogeG1sbGludC5jOiBhZGRlZCAtLXdhbGtlciBhbmQgbWFkZSBzdXJlIC0teGluY2x1ZGUgLS1zdHJlYW0gLS1kZWJ1ZwoJICB3b3JrcyBhcyBleHBlY3RlZAoJKiBNYWtlZmlsZS5hbSByZXN1bHQvZHRkMTEucmRyIHJlc3VsdC9lbnQ2LnJkciB0ZXN0L2R0ZDExIHRlc3QvZW50NgoJICByZXN1bHQvWEluY2x1ZGUvKi5yZHI6IGFkZGVkIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSB3YWxrZXIgYW5kCgkgIFhJbmNsdWRlIHhtbFJlYWRlciBzdXBwb3J0LCBoYWQgdG8gc2xpZ2h0bHkgY2hhbmdlIGEgY291cGxlIG9mIHRlc3RzCgkgIGJlY2F1c2UgdGhlIHdhbGtlciBjYW4ndCBkaXN0aW5ndWlzaCA8Zm9vLz4gZnJvbSA8Zm9vPjwvZm9vPgoKU2F0IE5vdiAgMSAxNzo0MjoyNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgbmFub2h0dHAuYyB0aHJlYWRzLmM6IHNlY29uZCBCZU9TIHBhdGNoIGZyb20gCgkgIE1hcmNpbiAnU2hhcmQnIEtvbmlja2kKCkZyaSBPY3QgMzEgMTU6MzU6MjAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFsd2F5cyBnZW5lcmF0ZSBsaW5lIG51bWJlcnMKCkZyaSBPY3QgMzEgMTE6NTM6NDYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGFub3RoZXIgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIGZpeGluZyAjMTI1ODIzCgpGcmkgT2N0IDMxIDExOjMzOjE4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogcHJldmlvdXMgZml4IGZvciAjMTI0MDQ0IHdhcyBicm9rZW4sIGNvcnJlY3QKCSAgZml4IHByb3ZpZGVkLgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgeG1sSU8uYzogZml4IHhtbFN0b3BQYXJzZXIoKQoJICBhbmQgdGhlIGVycm9yIGhhbmRsZXJzIHRvIGFkZHJlc3MgIzEyNTg3NwoKVGh1IE9jdCAzMCAyMzoxMDo0NiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogc2lkZSBlZmZlY3Qgb2YgIzEyMzEwNSBwYXRjaCwgbmFtZXNwYWNlIHJlc29sdXRpb24KCSAgd291bGQgZmFpbCB3aGVuIGRlZmluZWQgaW4gaW50ZXJuYWwgZW50aXRpZXMsIGZpeGVzICMxMjU4MjMKClRodSBPY3QgMzAgMTQ6MTA6NDIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiBiZSBtb3JlIGRlZmVuc2l2ZSBpbiB0aGUgeG1sUmVhZGVyIHB5dGhvbiBiaW5kaW5ncwoJICBmaXhpbmcgYnVnICMxMjQwNDQKClRodSBPY3QgMzAgMTE6MTQ6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogdGhlIGEtcG9zdGVyaW9yaSBEVEQgdmFsaWRhdGlvbiBjb2RlIHdhcyBub3QgdmFsaWRhdGluZwoJICB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucywgdGhpcyBmaXhlcyAjMTI0MTEwCgpXZWQgT2N0IDI5IDE0OjEzOjAzIFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeG1sSU8uYzogZW5oYW5jZWQgdG8gYnlwYXNzIGNvbXByZXNzaW9uIGRldGVjdGlvbiBjb2RlCgkgIHdoZW4gaW5wdXQgZmlsZSBpcyBzdGRpbiAoYnVnIDEyNTgwMSkKCldlZCBPY3QgMjkgMTg6MjE6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogZml4IG5lZWRlZCB3aGVuIEhUVFAgaXMgbm90IGNvbXBpbGVkIGluIGJ5IE1hcmsgVmFrb2MKCldlZCBPY3QgMjkgMTg6MDU6NTMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogbW9yZSBmaXhlcyBhYm91dCB1bnJlZ2lzdGVyaW5nIG9iamVjdHMKCSogaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFyayBWYWtvYwoJICBtaXNzaW5nIF9jcGx1c3BsdXMgcHJvY2Vzc2luZyBjbGF1c2UKCldlZCBPY3QgMjkgMDc6NDk6NTIgMjAwMyAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYzogYWRkZWQgeG1sU3RyVlByaW50ZiBmdW5jdGlvbgoKV2VkIE9jdCAyOSAxNDozNzo0MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYyB0ZXN0VGhyZWFkcy5jIHRocmVhZHMuYzogYXBwbGllZCBwYXRjaCBmcm9tCgkgIE1hcmNpbiAnU2hhcmQnIEtvbmlja2kgdG8gcHJvdmlkZSBCZU9TIHRocmVhZCBzdXBwb3J0LgoKV2VkIE9jdCAyOSAxNDoyMDoxNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOiBhcHBsaWVkIHBhdGNoCgkgIGZyb20gU3RldmUgQmFsbCB0byBtYWtlIGEgc2NoZW1hIHBhcnNlciBmcm9tIGEgcHJlcGFyc2VkIGRvY3VtZW50LgoKV2VkIE9jdCAyOSAxMzo1MjoyNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgYSBjb3VwbGUgb2YgcGF0Y2hlcyBmcm9tIE1hcmsgTGlsYmFjayBhYm91dCB0ZXh0CgkgIG5vZGVzIGNvYWxlc2NpbmcKCldlZCBPY3QgMjkgMTI6MTY6NTIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogY2hhbmdlIHN1Z2dlc3RlZCBieSBBbnRob255IENhcnJpY28gd2hlbiB1bnJlZ2lzdGVyaW5nCgkgIGEgbmFtZXNwYWNlIHByZWZpeCB0byBhIGNvbnRleHQKCSogaGFzaC5jOiBiZSBtb3JlIGNhcmVmdWwgYWJvdXQgY2FsbGluZyBjYWxsYmFja3Mgd2l0aCBOVUxMIHBheWxvYWRzLgoKV2VkIE9jdCAyOSAwMDowNDoyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUyBkb2MvKjogcHJlcGFyaW5nIHJlbGVhc2UgMi42LjEsIHVwZGF0ZWQgYW5kCgkgIHJlZ2VuZXJhdGVkIGRvY3MgYW5kIEFQSXMKCSogcGFyc2VyLmM6IGNsZWFudXAgYW5kIGxhc3QgY2hhbmdlIHRvIGZpeCAjMTIzMTA1CgpUdWUgT2N0IDI4IDIzOjAyOjI5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogRml4ICMxMjQ5MDcgYnkgc2ltcGx5IGJhY2twb3J0aW5nIHRoZSBzYW1lCgkgIGZpeCBhcyBmb3IgdGhlIFhNTCBwYXJzZXIKCSogcmVzdWx0L0hUTUwvZG9jMy5odG0uZXJyOiBjaGFuZ2UgdG8gSUQgZGV0ZWN0aW5nIG1vZGlmaWVkIG9uZQoJICB0ZXN0IHJlc3VsdC4KClR1ZSBPY3QgMjggMjI6Mjg6NTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGluY2x1ZGVkIGEgbmV3IGZ1bmN0aW9uCgkgIHRvIHJldXNlIGEgUHVzaCBwYXJzZXIgY29udGV4dCwgYmFzZWQgb24gR3JhaGFtIEJlbm5ldHQgb3JpZ2luYWwKCSAgY29kZQoJKiB2YWxpZC5jOiBpbiBIVE1MLCBhIG5hbWUgaW4gYW4gaW5wdXQgaXMgbm90IGFuIElECgkqIFRPRE86IGJ1ZyBsaXN0IHVwZGF0ZQoKVHVlIE9jdCAyOCAxOTo1NDozNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gbmljb0B4dHJhZHluZS5jb20gZm9yICMxMjUwMzAKClR1ZSBPY3QgMjggMTY6NDI6MTYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAKCSogZXJyb3IuYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGZpeGluZyBidWcgIzEyNTY1MwoJICBzb21ldGltZXMgdGhlIGVycm9yIGhhbmRsZXJzIGNhbiBnZXQgYSBwYXJzZXIgY29udGV4dCBvbiBEVEQKCSAgZXJyb3JzLCBhbmQgc29tZXRpbWUgdGhleSBkb24ndC4gU28gYmUgdmVyeSBjYXJlZnVsIHdoZW4gdHJ5aW5nCgkgIHRvIGdyYWIgdGhvc2UgaW5mb3JtYXRpb25zLgoKVHVlIE9jdCAyOCAxNToyNjoxOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBLYXNpbWllciBCdWNoY2lrIHdoaWNoIGZpeGVzIGEgCgkgIHByb2JsZW0gaW4geG1sU2VhcmNoTnMgaW50cm9kdWNlZCBpbiAyLjYuMAoKVHVlIE9jdCAyOCAxNDo1NzowMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgIzEyMzI2MywgdGhlIGVuY29kaW5nIGlzIG1hbmRhdG9yeSBpbiBhIHRleHRkZWNsLgoKVHVlIE9jdCAyOCAxMzo0ODo1MiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeCBidWcgIzEyNTA0NyBhYm91dCBzZXJpYWxpemluZyB3aGVuIGZpbmRpbmcgYSAKCSAgZG9jdW1lbnQgZnJhZ21lbnQgbm9kZS4KCk1vbiBPY3QgMjcgMTE6MTE6MjkgRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdFNBWC5jOiBmaXggYnVnICMxMjU1OTIgbmVlZCBhIE5VTEwgY2hlY2sKCSogaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oOiByZW5hbWUgYSBwYXJhbWV0ZXIKCk1vbiBPY3QgMjcgMDk6NDM6NDggRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSAjMTIzMTA1IGFib3V0IGRlZmF1bHRlZCBhdHRyaWJ1dGVzCgkgIGZyb20gZWxlbWVudCBjb21pbmcgZnJvbSBhbiBlbnRpdHkKCk1vbiBPY3QgMjcgMjE6MTI6MjcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxsaW50LmM6IGZpeGVkIHdhcm5pbmcgbWVzc2FnZSBmcm9tIElSSVggKGJ1ZyAxMjUxODIpCgkqIHB5dGhvbi9saWJ4bWwucHk6IHJlbW92ZWQgdGFicywgcmVwbGFjZWQgd2l0aCBzcGFjZXMKCSAgKGJ1ZyAxMjU1NzIpCgpNb24gT2N0IDI3IDA2OjE3OjMwIEVTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oIHBhcnNlckludGVybmFscy5jIHhtbElPLmM6IG1ha2Ugc3VyZSB3ZSByZXBvcnQgZXJyb3JzCgkgIGlmIHhtbE5ld0lucHV0RnJvbUZpbGUoKSBmYWlscy4KCSogeG1scmVhZGVyLmM6IGF2b2lkIHVzaW5nIF9wcml2YXRlIGZvciB0aGUgbm9kZSBvciBkb2N1bWVudAoJICBlbGVtZW50cy4KClNhdCBPY3QgMjUgMTc6MzM6NTkgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFkZGVkIGRlY2xhcmF0aW9uIGZvciB2ZXJNaWNyb1N1ZmZpeAoKRnJpIE9jdCAyNCAyMzowODoxNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBhcHBsaWVkIHBhdGNoIGZyb20gUGF0cmljayBXZWxjaGUgcHJvdmlkZWQgaW4KCSAgYnVnICMxMjU0MzIgLCBmdXR1cmUgcHJvb2ZpbmcgdGhlIC5tNCBmaWxlLgoJKiBwYXJzZXIuYzogcmVzZXR0aW5nIHRoZSBjb250ZXh0IHNob3VsZCBhbHNvIHJlc2V0IHRoZSBlcnJvcgoJKiBUT0RPOiBwcm9ibGVtIG9mIGNvbmZvcm1hbmNlIHcuci50LiBFMjAgd2FzIHJhaXNlZCBpbiB0aGUKCSAgWE1MIENvcmUgdGVsY29uZiBhbmQgbGlieG1sMiBpc24ndCBjb25mb3JtYW50IHRoZXJlLgoKV2VkIE9jdCAyMiAxNDozMzowNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sd3JpdGVyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbGZyZWQgTWlja2F1dHNjaCBmaXhpbmcgIzEyNTE4MAoKV2VkIE9jdCAyMiAxMDo1MDozMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2h2YWxpZC5jIGdlbkNoUmFuZ2VzLnB5OiBTdGVwaGFuZSBCaWRvdWwgcG9pbnRlZCBvdXQgYW5vdGhlcgoJICBzbWFsbCBnbGl0Y2ggbWlzc2luZyBhIGNvbnN0CgpXZWQgT2N0IDIyIDEwOjQzOjIxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaHZhbGlkLmMgZ2VuQ2hSYW5nZXMucHk6IFN0ZXBoYW5lIEJpZG91bCBwb2ludGVkIG91dCB0aGF0CgkgIGl0IGRvZXNuJ3QgZGVmaW5lIElOX0xJQlhNTAoKVHVlIE9jdCAyMSAyMToxNDo1NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IHR5cG8gcG9pbnRlZCBvdXQgYnkgU3RlcGhhbmUgQmlkb3VsCgpUdWUgT2N0IDIxIDExOjI2OjM2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2Igd2luMzIvTWFrZWZpbGUubWluZ3cgd2luMzIvTWFrZWZpbGUubXN2YwoJICB3aW4zMi9jb25maWd1cmUuanM6IHNldCBvZiBXaW4zMiBwYXRjaGVzIGZvciAyLjYuMCBieSBKb2FjaGltIEJhdWNoCgpUdWUgT2N0IDIxIDAyOjA3OjIyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGxhc3QgbWludXRlIHBhdGNoIGZyb20gRXJpYyBadXJjaGVyIG1ha2luZyBpdCBpbnRvIDIuNi4wCgpUdWUgT2N0IDIxIDAyOjAzOjAzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUyBkb2MvbGlieG1sMi54c2E6IHByZXBhcmluZyBsaWJ4bWwyLTIuNi4wCgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0aGUgZG9jcyBhbmQgQVBJCgpUdWUgT2N0IDIxIDAxOjAxOjU1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgZXJyb3IuYyB0cmVlLmM6IG1vdmVkIHRoZSBsaW5lIG51bWJlciB0byB0aGVpciBwcm9wZXIKCSAgZmllbGQgaW4gZWxlbWVudHMgbm93LgoKVHVlIE9jdCAyMSAwMDoyODoyMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbHdyaXRlci5jIE1ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oCgkgIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgYWRkZWQgdGhlIHhtbFdyaXRlciBtb2R1bGUgY29udHJpYnV0ZWQgYnkgQWxmcmVkIE1pY2thdXRzY2gKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhZGRlZCByb29tIGZvciBsaW5lIGFuZCBleHRyYSBpbmZvcm1hdGlvbgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyNi5weTogYnVnZml4aW5nIHNvbWUgcHJvYmxlbSBzb21lCgkgIG9mIHRoZW0gaW50cm9kdWNlZCBpbiBTZXB0ZW1iZXIKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjIGRvYy9saWJ4bWwyLWFwaS54bWw6IHJlZ2VuZXJhdGVkIHRoZSBBUEkKCk1vbiBPY3QgMjAgMTk6MDI6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbiB4bWxkd2Fsay5jIHhtbHJlYWRlci5jCgkgIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL3htbGR3YWxrLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiByZW1vdmluZyB4bWxkd2FsayBtb2R1bGUKCSAgc2luY2UgaXQgZ290IG1lcmdlZCB3aXRoIHRoZSB4bWxyZWFkZXIuCgkqIHBhcnNlci5jOiBjbGVhbnVwCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYyBweXRob24vbGlieG1sMmNsYXNzLnR4dCBkb2MvbGlieG1sMi1hcGkueG1sOgoJICByZWJ1aWx0IHRoZSBBUEkKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXI3LnB5CgkgIHB5dGhvbi90ZXN0cy93YWxrZXIucHk6IGFkZGluZyByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIHRoZQoJICBuZXcgeG1scmVhZGVyIEFQSXMsIG5ldyBBUElzIGZvciByZWFkZXIgY3JlYXRpb24sIGluY2x1ZGluZwoJICBtYWtlaW5nIHJlYWRlciAid2Fsa2VyIiBvcGVyYXRpbmcgb24gcHJlcGFyc2VkIGRvY3VtZW50IHRyZWVzLgoKU3VuIE9jdCAyMCAyMjozNzowMyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVudGl0aWVzLmMsIHZhbGlkLmM6IGZpeGVkIHByb2JsZW0gcmVwb3J0ZWQgb24gdGhlIG1haWxpbmcKCSAgbGlzdCBieSBNZWx2eW4gU29wYWN1YSAtIHdyb25nIGFyZ3VtZW50IG9yZGVyIG9uIGZ1bmN0aW9ucwoJICBjYWxsZWQgdGhyb3VnaCB4bWxIYXNoU2Nhbi4KClN1biBPY3QgMTkgMjM6NTc6NDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgeG1sSU8uYzogZml4ZXMgZm9yIGNvbXBpbGluZyB1c2luZyAtLXdpdGgtbWluaW11bQoKU3VuIE9jdCAxOSAyMzo0NjowNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBjbGVhbnVwIHhtbE5vZGVHZXRDb250ZW50KCkgcmV1c2luZyB4bWxOb2RlQnVmR2V0Q29udGVudCgpLAoJICB0ZXN0ZWQgaXQgdGhyb3VnaCB0aGUgeHNsdCByZWdyZXNzaW9uIHN1aXRlLgoKU3VuIE9jdCAxOSAyMjo0MjoxNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWRkaW5nIHhtbE5vZGVCdWZHZXRDb250ZW50KCkKCSAgYWxsb3dpbmcgdG8gZ3JhYiB0aGUgY29udGVudCB3aXRob3V0IGZvcmNpbmcgYWxsb2NhdGlvbnMuCgkqIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IGRvYy9saWJ4bWwyLWFwaS54bWw6IHJlYnVpbHQgdGhlIEFQSQoJKiB4cGF0aC5jIHhtbGR3YWxrLmM6IHJlbW92ZWQgYSBjb3VwbGUgb2YgY29tbWVudCBlcnJvcnMuCgpTdW4gT2N0IDE5IDE2OjM5OjM2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBwYXRjaCBmcm9tIENocmlzIEFuZGVyc29uIHRvIGNoYW5nZSBiYWNrCgkgIG1lbWNtcCB3aXRoIENNUHgoKQoKU3VuIE9jdCAxOSAxNjoyNDoxOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCB0byBub3Qgc2VuZCBOVUxMIHRvICVzIHByaW50aW5nCgkqIHB5dGhvbi90ZXN0cy9lcnJvci5weSByZXN1bHQvSFRNTC9kb2MzLmh0bS5lcnIKCSAgcmVzdWx0L0hUTUwvdGVzdDMuaHRtbC5lcnIgcmVzdWx0L0hUTUwvd2lyZWQuaHRtbC5lcnIKCSAgcmVzdWx0L3ZhbGlkL3Q4LnhtbC5lcnIgcmVzdWx0L3ZhbGlkL3Q4YS54bWwuZXJyOiBjbGVhbmluZwoJICB1cCBzb21lIG9mIHRoZSByZWdyZXNzaW9uIHRlc3RzIGVycm9yCgpTdW4gT2N0IDE5IDE1OjMxOjQzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9uYW5vaHR0cC5oIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIAoJICBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIG5hbm9odHRwLmMgcGFyc2VySW50ZXJuYWxzLmMgeG1sSU8uYzoKCSAgRml4ZWQgdGhlIEhUVFA8LT5wYXJzZXIgaW50ZXJyYWN0aW9uLCB3aGljaCBzaG91bGQgZml4IDIgbG9uZwoJICBzdGFuZGluZyBidWdzICMxMDQ3OTAgYW5kICMxMjQwNTQgLCB0aGlzIGFsc28gZml4IHRoZSBmYWN0IHRoYXQKCSAgSFRUUCBlcnJvciBjb2RlICg+IDQwMCkgc2hvdWxkIG5vdCBnZW5lcmF0ZSBkYXRhLCB3ZSB1c3VhbGx5CgkgIGRvbid0IHdhbnQgdG8gcGFyc2UgdGhlIEhUTUwgZXJyb3IgaW5mb3JtYXRpb24gaW5zdGVhZCBvZiB0aGUKCSAgcmVzb3VyY2UgbG9va2VkIGF0LgoKU3VuIE9jdCAxOSAxOToyMDo0OCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9NYWtlZmlsZS5hbTogZW5oYW5jZWQgdGhlIGluc3RhbGxhdGlvbiBvZiB0dXRvcmlhbCBmaWxlcwoJICB0byBhdm9pZCBpbnN0YWxsaW5nIENWUyBzdWJkaXJlY3RvcmllcyAoYnVnIDEyMjk0MykKClN1biBPY3QgMTkgMTc6MzM6MjcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxJTy5jOiBmaXhlZCBzZWdmYXVsdCB3aGVuIGlucHV0IGZpbGUgbm90IHByZXNlbnQKCSogdHJlZS5jOiBjaGFuZ2VkIG91dHB1dCBmb3JtYXR0aW5nIG9mIFhNTF9DREFUQV9TRUNUSU9OCgkgIChidWcgMTIwOTE3KQoKU3VuIE9jdCAxOSAwMDoxNTozOCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jCgkgIFNBWDIuYyBjYXRhbG9nLmMgZGVidWdYTUwuYyBlbnRpdGllcy5jIHBhcnNlci5jIHJlbGF4bmcuYwoJICB0ZXN0U0FYLmMgdHJlZS5jIHZhbGlkLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jCgkgIHhwYXRoLmM6IENoYW5nZWQgYWxsICg/KSBvY2N1cmVuY2VzIHdoZXJlIHZhbGlkYXRpb24gbWFjcm9zCgkgIChJU194eHgpIGhhZCBzaW5nbGUtYnl0ZSBhcmd1bWVudHMgdG8gdXNlIElTX3h4eF9DSCBpbnN0ZWFkCgkgIChlLmcuIElTX0JMQU5LIGNoYW5nZWQgdG8gSVNfQkxBTktfQ0gpLiAgVGhpcyBnZXRzIHJpZCBvZgoJICBtYW55IHdhcm5pbmcgbWVzc2FnZXMgb24gY2VydGFpbiBwbGF0Zm9ybXMsIGFuZCBhbHNvIGhpZ2gtCgkgIGxpZ2h0cyBwbGFjZXMgaW4gdGhlIGxpYnJhcnkgd2hpY2ggbWF5IG5lZWQgdG8gYmUgZW5oYW5jZWQKCSAgZm9yIHByb3BlciBVVEY4IGhhbmRsaW5nLgoKU2F0IE9jdCAxOCAyMDozNDoxOCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGdlbkNoUmFuZ2VzLnB5LCBjaHZhbGlkLmMsIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaCwKCSAgZG9jL2FwaWJ1aWxkLnB5OiBlbmhhbmNlZCB0byBpbmNsdWRlIGVub3VnaCBjb21tZW50cyB0bwoJICBtYWtlIHRoZSBhcGkgZG9jIGdlbmVyYXRpb24gaGFwcHkuCgpTYXQgT2N0IDE4IDA3OjI4OjI1IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9odHRwLmMgeG1sSU8uYyBpbmNsdWRlL2xpYnhtbC9uYW5vaHR0cC5oOiBzdGFydGluZyB3b3JrCgkgIHRvIGZpeCB0aGUgSFRUUC9YTUwgcGFyc2VyIGludGVncmF0aW9uLgoKU2F0IE9jdCAxOCAxMTowNDozMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGFkZGVkIG5ldyBBUElzCgkgIGZvciBjcmVhdGluZyByZWFkZXIgZnJvbSBzb3VyY2VzIG9yIHJldXNpbmcgYSByZWFkZXIgd2l0aAoJICBhIG5ldyBzb3VyY2UsIGxpa2UgdGhlIHhtbFJlYWR4eCBhbmQgeG1sQ3R4dFJlYWR4eHgKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL2FwaWJ1aWxkLnB5CgkgIGRvYy9NYWtlZmlsZS5hbTogcmVnZW5lcmF0ZWQgdGhlIEFQSXMKCSogZG9jL3htbC5odG1sOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBTdGVmYW4gS29zdCBmb3IgbmFtZXNhcGNlIGRvY3MKClNhdCBPY3QgMTggMTI6NDY6MDIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW5DaFJhbmdlcy5weSwgY2h2YWxpZC5jLCBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmgsCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oOiBlbmhhbmNlZCBtYWNyb3MgdG8gYXZvaWQKCSAgYnJlYWtpbmcgQUJJIGZyb20gcHJldmlvdXMgdmVyc2lvbnMuCgkqIGNhdGFsb2cuYywgcGFyc2VyLmMsIHRyZWUuYzogbW9kaWZpZWQgdG8gdXNlIElTXyogbWFjcm9zCgkgIGRlZmluZWQgaW4gcGFyc2VySW50ZXJuYWxzLmguICBNYWtlcyBtYWludGVuYW5jZSBtdWNoIGVhc2llci4KCSogdGVzdEhUTUwuYywgdGVzdFNBWC5jLCBweXRob24vbGlieG1sLmM6IG1pbm9yIGZpeGVzIHRvIGF2b2lkCgkgIGNvbXBpbGF0aW9uIHdhcm5pbmdzCgkqIGNvbmZpZ3VyYXRpb24uaW46IGZpeGVkIHB1c2hIVE1MIHRlc3QgZXJyb3I7IGVuaGFuY2VkIGZvcgoJICBiZXR0ZXIgZGV2ZWwgKG1lKSB0ZXN0aW5nCgpGcmkgT2N0IDE3IDE0OjM4OjU0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsZWdhY3kuYzogcmVtb3ZlIHRoZSB3YXJuaW5nIGZvciBzdGFydERvY3VtZW50KCksIGFzIGl0IGlzIHVzZWQgYnkKCSAgZ2xhZGUgKG9yIGdsYWRlLXB5dGhvbikKCSogcGFyc2VyLmMgcmVsYXhuZy5jIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBhbiBhc3NvcnRlZCBzZXQgb2YKCSAgaW52YWxpZCBhY2Nlc3NlcyBmb3VuZCBieSBydW5uaW5nIHNvbWUgUHl0aG9uIGJhc2VkIHJlZ3Jlc3Npb24KCSAgdGVzdHMgdW5kZXIgdmFsZ3JpbmQuIFRoZXJlIGlzIHN0aWxsIGEgZmV3IGxlYWtzIHJlcG9ydGVkIGJ5IHRoZQoJICByZWxheG5nIHJlZ3Jlc3Npb25zIHdoaWNoIG5lZWQgc29tZSBhdHRlbnRpb24uCgkqIGRvYy9NYWtlZmlsZS5hbTogZml4ZWQgYSBtYWtlIGluc3RhbGwgcHJvYmxlbSBjLmYuICMxMjQ1MzkKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6IGFkZGl0aW9uIG9mIHhtbFBhcnNlck1heERlcHRoCgkgIHBhdGNoIGZyb20gY3J1dGNoZXIKCldlZCBPY3QgMTUgMTI6NDc6MzMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBNYXJjIExpeWFuYWdlIHBvaW50ZWQgb3V0IHRoYXQgeG1sQ2xlYW51cFBhcnNlcigpCgkgIHdhcyBtaXNzaW5nIHhtbENsZWFudXBJbnB1dENhbGxiYWNrcyBhbmQgeG1sQ2xlYW51cE91dHB1dENhbGxiYWNrcwoJICBjYWxscy4KCldlZCBPY3QgMTUgMTA6MTY6NDcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZtcy9idWlsZF9saWJ4bWwuY29tIHRyaW9uYW4uYzogVk1TIHBhdGNoIGZyb20gQ3JhaWcgQS4gQmVycnkKCk1vbiBPY3QgMTMgMjE6NDY6MjUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBzbWFsbCBmaXggZnJvbSBCam9ybiBSZWVzZQoKTW9uIE9jdCAxMyAxNTo1OToyNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4IGEgY2FsbCBtaXNzaW5nIGFyZ3VtZW50cwoKU3VuIE9jdCAxMiAxODo0MjoxOCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGdlbkNoUmFuZ2VzLnB5LCBjaHZhbGlkLmMsIGluY2x1ZGUvbGlieG1sL2NodmFsaWQuaDogZml4ZWQKCSAgYSBidWcgaW4gdGhlIHJhbmdlIHNlYXJjaDsgZW5oYW5jZWQgcmFuZ2UgZ2VuZXJhdGlvbiAoaW5saW5lIGNvZGUKCSAgaWYgYSBzbWFsbCBudW1iZXIgb2YgaW50ZXJ2YWxzKTsgZW5oYW5jZWQgdGhlIHJlYWRhYmlsaXR5IG9mIHRoZQoJICBvdXRwdXQgZmlsZXMuCgpTdW4gT2N0IDEyIDAwOjUyOjE0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaHZhbGlkLmRlZiBjaHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvY2h2YWxpZC5oOiByZWJ1aWx0IAoJICBjaHZhbGlkLmRlZiBmcm9tIHNjcmF0Y2ggYmFzZWQgb24gWE1MIDJuZCBlZGl0aW9uIFJFQwoJICBhbmQgcmVnZW5lcmF0ZWQgdGhlIGNvZGUuCgpTYXQgT2N0IDExIDIyOjU0OjEzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogcmVtb3ZlZCBzb21lIGFubm95aW5nIHdhcm5pbmdzCgkqIGNodmFsaWQuZGVmIGNodmFsaWQuYyBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmg6IGZpeGVkIGEgYnVnCgkgIGluIHRoZSBQdWJpZENoYXJzIGRlZmluaXRpb24sIHJlZ2VuZXJhdGVkLCB0aGVyZSBpcyBzdGlsbAoJICBhIGJ1ZyBsZWZ0IHNvbWV3aGVyZQoJKiBnZW5DaFJhbmdlcy5weTogc2F2ZSB0aGUgaGVhZGVyIGRpcmVjdGx5IGluIGluY2x1ZGUvbGlieG1sLwoJKiBjb25maWd1cmUuaW46IEkgZ2VuZXJhdGVkIGEgMi42LjBiZXRhNiBlYXJsaWVyIHRvZGF5CgpTYXQgT2N0IDExIDIzOjMyOjQ3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZml4ZWQgc21hbGwgZXJyb3Igb24gcHJldmlvdXMgY29tbWl0IChjaHZhbGlkLmggaW4KCSAgYmFzZSBkaXIgaW5zdGVhZCBvZiBpbmNsdWRlIGRpcmVjdG9yeSkKClNhdCBPY3QgMTEgMjM6MTE6MjIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBnZW5DaFJhbmdlLnB5LCBjaHZhbGlkLmRlZiwgY2h2YWxpZC5jLCBpbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmg6CgkgIG5ldyBmaWxlcyBmb3IgYSBkaWZmZXJlbnQgbWV0aG9kIGZvciBkb2luZyByYW5nZSB2YWxpZGF0aW9uCgkgIG9mIGNoYXJhY3RlciBkYXRhLgoJKiBNYWtlZmlsZS5hbSwgcGFyc2VySW50ZXJuYWxzLmMsIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtLAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaDogbW9kaWZpZWQgZm9yIG5ldyByYW5nZSBtZXRob2QuCgkqIGNhdGFsb2cuYzogc21hbGwgZW5oYW5jZSBmb3Igd2FybmluZyBtZXNzYWdlICh1c2luZyBvbmUKCSAgb2YgdGhlIG5ldyByYW5nZSByb3V0aW5lcykKClNhdCBPY3QgMTEgMTM6MjQ6NTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogYWRkaW5nIGFuIHNlcnJvciBmaWVsZCB0bwoJICB0aGUgdmFsaWRhdGlvbiBjb250ZXh0IGJyZWFrcyB0aGUgQUJJIGZvciB0aGUgeG1sUGFyc2VyQ3R4dAoJICBzdHJ1Y3R1cmUgc2luY2UgaXQncyBlbWJlZGRlZCBieSBjb250ZW50IGFuZCBub3QgYnkgcmVmZXJlbmNlCgpTYXQgT2N0IDExIDEyOjQ2OjQ5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHBhdGNoIGZyb20gTWlrZSBIb21tZXkKCSogdGhyZWFkcy5jOiBhcHBsaWVkIFdpbmRvd3MgcGF0Y2ggZnJvbSBKZXNzZSBQZWx0b24gYW5kIFN0ZXBoYW5lCgkgIEJpZG91bAoJKiBwYXJzZXIuYzogZml4IHRoZSBwb3RlbnRpYWxseSBuYXN0eSBhY2Nlc3MgdG8gY3R4dC0+c2Vycm9yCgkgIHdpdGhvdXQgY2hlY2tpbmcgZmlyc3QgdGhhdCB0aGUgU0FYIGJsb2NrIGlzIHZlcnNpb24gMgoKRnJpIE9jdCAxMCAyMTozNDowMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jOiBmaXhlZCBhIG5hc3R5IGJ1ZyB3aXRoIGludGVybmluZyBzb21lIHRleHQgc3RyaW5ncwoJKiBjb25maWd1cmUuaW46IHByZXBhcmUgZm9yIGJldGE1IG9mIDIuNi4wCgkqIGxpYnhtbC5oIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDoKCSAgYmV0dGVyIGVycm9yIGhhbmRsaW5nIGZvciBJL08gYW5kIGNvbnZlcnRlZCBGVFAgYW5kIEhUVFAKCSogcGFyc2VyLmM6IGZpeGVkIGFub3RoZXIgYnVnCgpGcmkgT2N0IDEwIDE2OjQ1OjIwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmM6IGZpeGVkIHVuaW5pdGlhbGl6ZWQgbmV3IGZpZWxkLgoJKiByZXN1bHQvVkMvT25lSUQyIHJlc3VsdC9yZWxheG5nLyouZXJyOiBmaXhlZCBhIHR5cG8gdXBkYXRpbmcKCSAgYWxsIG1lc3NhZ2VzCgpGcmkgT2N0IDEwIDE2OjE5OjE3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IG1ha2Ugcm9vbSBpbiBEb2MsIEVsZW1lbnQsIEF0dHJpYnV0ZXMKCSAgZm9yIFBTVkkgdHlwZSBpbmZvcm1hdGlvbnMuCgpGcmkgT2N0IDEwIDE2OjA4OjAyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgYzE0bi5jIGNhdGFsb2cuYyBlcnJvci5jIGdsb2JhbHMuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYyByZWxheG5nLmMgdmFsaWQuYyB4aW5jbHVkZS5jIHhtbElPLmMgeG1scmVnZXhwLmMKCSAgeG1sc2NoZW1hcy5jIHhwYXRoLmMgeHBvaW50ZXIuYyBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvdmFsaWQuaCAKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogU2V0dGluZyB1cCB0aGUgZnJhbWV3b3JrIGZvciBzdHJ1Y3R1cmVkCgkgIGVycm9yIHJlcG9ydGluZywgdG91Y2hlcyBhIGxvdCBvZiBtb2R1bGVzLCBidXQgbGl0dGxlIGNvZGUgbm93CgkgIHRoZSBlcnJvciBoYW5kbGluZyB0cmFpbCBoYXMgYmVlbiBjbGVhbmVkIHVwLgoKRnJpIE9jdCAxMCAxNDoyOTo0MiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGNvbnZlcnRlZCB0aGUgQzE0TiBtb2R1bGUgdG9vCgpGcmkgT2N0IDEwIDEzOjQwOjUxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBjbGVhbnVwCgkqIHhwb2ludGVyLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogbWlncmF0ZWQgWFBvaW50ZXIgbW9kdWxlCgkgIHRvIHRoZSBuZXcgZXJyb3IgbWVjaGFuaXNtCgpGcmkgT2N0IDEwIDEyOjQ5OjUzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlcnJvci5jIHhtbHNjaGVtYXMuYzogYSBiaXQgb2YgY2xlYW51cAoJKiByZXN1bHQvc2NoZW1hcy8qLmVycjogdXBkYXRlZCB3aXRoIHRoZSBuZXcgcmVzdWx0IHN0cmluZ3MKCkZyaSBPY3QgMTAgMDM6NTg6MzkgUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBmaXhlZCBidWcgMTI0MDYxCgpGcmkgT2N0IDEwIDAyOjQ3OjIyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cAoJKiBlbmNvZGluZy5jOiBmaXggYSBmdW5ueSB0eXBvCgkqIGVycm9yLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6CgkgIGNvbnZlcnRlZCB0aGUgU2NoZW1hcyBjb2RlIHRvIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcuIFBJVEEsCgkgIHN0aWxsIG5lZWQgdG8gY2hlY2sgb3V0cHV0IGZyb20gcmVncmVzc2lvbiB0ZXN0cy4KClRodSBPY3QgIDkgMTU6MTM6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogY29udmVydGVkIHRvbwoJKiB0cmVlLmM6IHNtYWxsIGNsZWFudXAKClRodSBPY3QgIDkgMTM6NDQ6NTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGNvbW1lbnQgZml4CgkqIGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBtaWdyYXRpbmcgdGhlIGNhdGFsb2cgY29kZQoJICB0byB0aGUgbmV3IGluZnJhc3RydWN0dXJlCgpUaHUgT2N0ICA5IDAwOjM2OjAzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBmaW5hbCBlcnJvciBoYW5kbGluZyBjbGVhbnVwCgkqIHhpbmNsdWRlLmMgZXJyb3IuYzogY29udmVydGVkIFhJbmNsdWRlIHRvIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcKCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYWRkZWQgWEluY2x1ZGUgZXJyb3JzCgpXZWQgT2N0ICA4IDIzOjMxOjIzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYnVnIGluIGNvbXByZXNzaW9uIHNhdmluZyB3YXMgY3Jhc2hpbmcgZ2FsZW9uCgkgIHJlcG9ydGVkIGJ5IHRldWYKCldlZCBPY3QgIDggMjE6MTg6MTIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgdHJlZS5jIHhtbElPLmMgeG1sbGludC5jOiBtb3JlIGNsZWFudXAgdGhyb3VnaCB0aGUKCSAgSS9PIGVycm9yIHBhdGgKCldlZCBPY3QgIDggMjA6NTc6MjcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGJldHRlciBoYW5kbGluZyBvZiBlcnJvciBjYXNlcwoKV2VkIE9jdCAgOCAxMzo1MToxNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogZmlyc3QgcGFzcyBhdAoJICBjbGVhbmluZyB1cCBlcnJvciBoYW5kbGluZyBpbiB0aGUgSS9PIG1vZHVsZS4KCldlZCBPY3QgIDggMTA6NTI6MDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGVycm9yIGhhbmRsaW5nCgkgIGNsZWFudXAgb2YgdGhlIFJlZ2V4cCBtb2R1bGUuCgpXZWQgT2N0ICA4IDAxOjA5OjA1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGNvbnZlcnRpbmcgdGhlIHRyZWUgbW9kdWxlIHRvbwoJKiBlcnJvci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGNyZWF0ZWQgYSBzaW1wbGVyIGludGVybmFsCgkgIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbi4KClR1ZSBPY3QgIDcgMjM6MTk6MzkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVycm9yLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaCBpbmNsdWRlL2xpYnhtbC94cGF0aC5oCgkgIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmggeHBhdGguYzogY2xlYW5pbmcgdXAgWFBhdGgKCSAgZXJyb3IgcmVwb3J0aW5nIHRoYXQgdGltZS4gCgkqIHRocmVhZHMuYzogYXBwbGllZCB0aGUgdHdvIHBhdGNoZXMgZm9yIFRMUyB0aHJlYWRzCgkgIG9uIFdpbmRvd3MgZnJvbSBKZXNzZSBQZWx0b24KCSogcGFyc2VyLmM6IHRpbnkgc2FmZXR5IHBhdGNoIGZvciB4bWxTdHJQcmludGYoKSBtYWtlIHN1cmUgdGhlCgkgIHJldHVybiBpcyBhbHdheXMgemVybyB0ZXJtaW5hdGVkLiBTaG91bGQgYWxzbyBoZWxwIGRldGVjdGluZwoJICBwYXNzaW5nIHdyb25nIGJ1ZmZlciBzaXplIGVhc2lsbHkuCgkqIHJlc3VsdC9WQy8qIHJlc3VsdC92YWxpZC9yc3MueG1sLmVyciByZXN1bHQvdmFsaWQveGxpbmsueG1sLmVycjoKCSAgdXBkYXRlZCB0aGUgcmVzdWx0cyB0byBmb2xsb3cgdGhlIGVycm9ycyBzdHJpbmcgZ2VuZXJhdGVkIGJ5CgkgIGxhc3QgY29tbWl0LgoKVHVlIE9jdCAgNyAxNDoxNjo0NSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGxhc3QgY2xlYW51cCBvZiBlcnJvcgoJICBoYW5kbGluZyBpbiB0aGUgUmVsYXgtTkcgbW9kdWxlLgoKVHVlIE9jdCAgNyAxMzozMDozOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYyByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogc3dpdGNoZWQgUmVsYXgtTkcKCSAgbW9kdWxlIHRvIHRlaCBuZXcgZXJyb3IgcmVwb3J0aW5nLiBCZXR0ZXIgZGVmYXVsdCByZXBvcnQsIGFkZHMKCSAgdGhlIGVsZW1lbnQgYXNzb2NpYXRlZCBpZiBmb3VuZCwgY29udGV4dCBhbmQgbm9kZSBhcmUgaW5jbHVkZWQKCSAgaW4gdGhlIHhtbEVycm9yCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5OiB0aGUgZXJyb3IgbWVzc2FnZXMgY2hhbmdlZC4KCSogcmVzdWx0L3JlbGF4bmcvKjogZXJyb3IgbWVzc2FnZSBjaGFuZ2VkIHRvby4KCk1vbiBPY3QgIDYgMTA6NDY6MzUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLmJjYiB3aW4zMi9NYWtlZmlsZS5taW5ndyB3aW4zMi9NYWtlZmlsZS5tc3ZjCgkgIHdpbjMyL2NvbmZpZ3VyZS5qczogYXBwbGllZCBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCB0bwoJICBmaXggdGhlIGNvbXBpbGF0aW9uIG9mIDIuNi4wIGNvZGUgb24gV2luMzIKCk1vbiBPY3QgIDYgMTA6MTY6MzAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBmaXhpbmcgdGhlIHNjcmlwdAoJKiBwYXJzZXIuYzogcmVwbGFjZSBzZXF1ZW5jZXMgb2YgUkFXICYmIE5YVCguKSA9PSAnLicgd2l0aAoJICBtZW1jbXAgY2FsbHMsIHNlZW1zIHRvIG5vdCBicmVhayBjb25mb3JtYW5jZSwgc2xpZ2h0bHkgaW5mbGF0ZQoJICB0aGUgc2l6ZSBvZiB0aGUgZ2NjIGdlbmVyYXRlZCBjb2RlIHRob3VnaC4KClN1biBPY3QgIDUgMjM6MzA6NDggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg6CgkgIG1vcmUgY2xlYW51cCBvZiBlcnJvciBoYW5kbGluZyBpbiBwYXJzZXJJbnRlcm5hbHMsIHNoYXJpbmcgdGhlCgkgIHJvdXRpbmUgZm9yIG1lbW9yeSBlcnJvcnMuCgpTdW4gT2N0ICA1IDE1OjQ5OjE0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgTWFrZWZpbGUuYW0gbGVnYWN5LmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogbW9yZSBjb2RlIGNsZWFudXAsIGVzcGVjaWFsbHkgYXJvdW5kCgkgIGVycm9yIG1lc3NhZ2VzLCB0aGUgSFRNTCBwYXJzZXIgaGFzIG5vdyBiZWVuIHVwZ3JhZGVkIHRvIHRoZSBuZXcKCSAgaGFuZGxpbmcuCgkqIHJlc3VsdC9IVE1MLyo6IGEgZmV3IGNoYW5nZXMgaW4gdGhlIHJlc3VsdGluZyBlcnJvciBtZXNzYWdlcwoKU2F0IE9jdCAgNCAyMzowNjo0MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogbW9yZSBlcnJvci93YXJuaW5nCgkgIGhhbmRsaW5nIGNsZWFudXBzLCB0aGUgWE1MIHBhcnNlciBtb2R1bGUgc2hvdWxkIGJlIG9rYXkgbm93LgoKU2F0IE9jdCAgNCAwMTo1ODoyNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIHhtbGR3YWxrLmMgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0KCSAgaW5jbHVkZS9saWJ4bWwveG1sZHdhbGsuaCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46CgkgIGludGVncmF0ZWQgdGhlIHhtbERvY1dhbGtlciBBUEkgZ2l2ZW4gYnkgQWxmcmVkIE1pY2thdXRzY2gsCgkgIGFuZCBwcm92aWRpbmcgYW4geG1sUmVhZGVyIGxpa2UgQVBJIGJ1dCB3b3JraW5nIG9uIGEgeG1sRG9jUHRyLgoKU2F0IE9jdCAgNCAwMDoxODoyOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IG1vcmUgY2xlYW51cCBpbiBtYWtlIHRlc3RzCgkqIGVycm9yLmMgdmFsaWQuYyBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOiBtb3JlIHdvcmsKCSAgaW4gdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBlcnJvciByZXBvcnRpbmcgc3RyYXRlZ3kuCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5ICByZXN1bHQvVkMvKiByZXN1bHQvdmFsaWQvKjoKCSAgZmV3IGNoYW5nZXMgaW4gdGhlIHN0cmluZ3MgZ2VuZXJhdGVkIGJ5IHRoZSB2YWxpZGF0aW9uIG91dHB1dAoKRnJpIE9jdCAgMyAwMDoxOTowMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNoYW5nZWQgJ21ha2UgdGVzdHMnIHRvIHVzZSBhIGNvbmNpc2Ugb3V0cHV0LAoJICBzY3JvbGxpbmcgdG8gc2VlIHdoZXJlIHRoaW5nIGJyb2tlIHdhc24ndCBwbGVhc2FudAoJKiBjb25maWd1cmUuaW46IHNvbWUgYmV0YTQgcHJlcGFyYXRpb24sIGJ1dCBub3QgcmVhZHkgeWV0CgkqIGVycm9yLmMgZ2xvYmFscy5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oOgoJICBuZXcgZXJyb3IgaGFuZGxpbmcgY29kZSwgbGFzdCBlcnJvciBpbmZvcm1hdGlvbnMgYXJlIHN0b3JlZAoJICBpbiB0aGUgcGFyc2luZyBjb250ZXh0IG9yIGEgZ2xvYmFsIHZhcmlhYmxlLCBuZXcgQVBJcyB0bwoJICBoYW5kbGUgdGhlIHhtbEVycm9yUHRyIHR5cGUuCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHZhbGlkLmMgOiBzdGFydGVkIG1pZ3JhdGluZyB0byB0aGUKCSAgbmV3IGVycm9yIGhhbmRsaW5nIGNvZGUsIGl0J3MgYSByb3lhbCBwYWluLgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaDoKCSAgbW92ZWQgdGhlIGRlZmluaXRpb24gb2YgeG1sTmV3UGFyc2VyQ3R4dCgpCgkqIHBhcnNlci5jOiBzbWFsbCBwb3RlbnRpYWwgYnVmZmVyIGFjY2VzcyBwcm9ibGVtIGluIHB1c2ggY29kZQoJICBwcm92aWRlZCBieSBKdXN0aW4gRmxldGNoZXIKCSogcmVzdWx0Lyouc2F4IHJlc3VsdC9WQy9QRU5lc3RpbmcqIHJlc3VsdC9uYW1lc3BhY2VzLyoKCSAgcmVzdWx0L3ZhbGlkLyouZXJyOiBzb21lIGVycm9yIG1lc3NhZ2VzIHdlcmUgc2xpZ3RobHkgY2hhbmdlZC4KClRodSBPY3QgIDIgMTM6MDE6MTMgMjAwMyAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYzogaW50cm9kdWNlZCB4bWxTdHJQcmludGYKCWZ1bmN0aW9uICh3cmFwcGVyIGFyb3VuZCBzbnByaW50ZikKCldlZCBPY3QgIDEgMjE6MTI6MDYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVudGl0aWVzLmM6IEZpeCBlcnJvciBvbiBvdXRwdXQgb2YgaGlnaCBjb2RlcG9pbnQgY2hhcnJlZiBsaWtlCgkgICYjeDEwRkZGRjsgLCByZXBvcnRlZCBieSBFcmljIEhhbmNocm93CgpXZWQgT2N0ICAxIDE0OjIwOjEwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvRE9DQnBhcnNlci5oOiBsZXQncyBzZWUgaG93IG11Y2gKCSAgb2YgYSBwYWluIG11cnJheWMgaXMgcmVhbGx5IGdvbm5hIGJlLgoKV2VkIE9jdCAgMSAxMTowMzo0MCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IEFwcGxpZWQgZml4IGZvciBidWcgIzEyMzQ4MSByZXBvcnRlZCBieSBQZXRlciBEZXJyCgpUdWUgU2VwIDMwIDE1OjM0OjMxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jIGxlZ2FjeS5jIHBhcnNlci5jOiBtYWRlIHRoZSBwcmVkZWZpbmVkIGVudGl0aWVzCgkgIHN0YXRpYyBwcmVkZWZpbmVkIHN0cnVjdHVyZXMgdG8gYXZvaWQgdGhlIHdvcmssIG1lbW9yeSBhbmQKCSAgaGF6YXJkcyBhc3NvY2lhdGVkIHRvIGluaXRpYWxpemF0aW9uL2NsZWFudXAuCgpUdWUgU2VwIDMwIDE0OjMwOjQ3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGxlZ2FjeS5jIHBhcnNlci5jCgkgIHBhcnNlckludGVybmFscy5jIHRlc3RIVE1MLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW46IGFkZGVkIGEgbmV3IGNvbmZpZ3VyZQoJICBvcHRpb24gLS13aXRoLXB1c2gsIHNvbWUgY2xlYW51cHMsIGNoYXNlZCBjb2RlIHNpemUgYW5vbWFsaWVzLgoJICBOb3cgYSBsaWJyYXJ5IGNvbmZpZ3VyZWQgLS13aXRoLW1pbmltdW0gaXMgYXJvdW5kIDE1MEtCLAoJICBzb3VuZHMgZ29vZCBlbm91Z2guCgpUdWUgU2VwIDMwIDEyOjMxOjAwIEFFU1QgMjAwMyBNYWxjb2xtIFRyZWRpbm5pY2sgPG1hbGNvbG1AY29tbXNlY3VyZS5jb20uYXU+CgoJKiBsaWJ4bWwtMi4wLXVuaW5zdGFsbGVkLnBjLmluOiBOZXcgZmlsZSBmb3IgYnVpbGRpbmcgYWdhaW5zdAoJdW5pbnN0YWxsZWQgbGlieG1sMiBidWlsZHMuCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuYW06IFN1cHBvcnQgdGhlICotdW5pbnN0YWxsZWQucGMgZmlsZS4KCSogLmN2c2lnbm9yZTogSWdub3JlIHRoZSBuZXcgZ2VuZXJhdGVkICoucGMgZmlsZS4KClR1ZSBTZXAgMzAgMDI6Mzg6MTYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIFNBWC5jIFNBWDIuYyBjb25maWd1cmUuaW4gZ2xvYmFscy5jIHBhcnNlci5jCgkgIHBhcnNlckludGVybmFscy5jIHRlc3RSZWFkZXIuYyB0ZXN0U0FYLmMgeG1sSU8uYyB4bWxsaW50LmMKCSAgeG1scmVhZGVyLmMgZXhhbXBsZS9nam9icmVhZC5jIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgYWRkZWQgMiBuZXcgY29uZmlndXJlIG9wdGlvbjogLS13aXRoLXJlYWRlciAtLXdpdGgtc2F4MQoJICB0byBhbGxvdyByZW1vdmluZyB0aGUgcmVhZGVyIG9yIG5vbi14bWxSZWFkeHh4KCkgaW50ZXJmYWNlcy4KCk1vbiBTZXAgMjkgMTk6NTg6MjYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBlbnRpdGllcy5jIHRyZWUuYyB2YWxpZC5jIHhtbGxpbnQuYwoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBBZGRpbmcgYSBjb25maWd1cmUgb3B0aW9uIHRvIHJlbW92ZSB0cmVlIG1hbmlwdWxhdGlvbgoJICBjb2RlIHdoaWNoIGlzIG5vdCBzdHJpY3RseSBuZWVkZWQgYnkgdGhlIHBhcnNlci4KCk1vbiBTZXAgMjkgMTU6MjM6NDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBsYXN0IGZpbmlzaGluZyB0b3VjaCB0byB0aGUgQmVPUwoJICBwYXRjaCBmcm9tIE1hcmNpbiAnU2hhcmQnIEtvbmlja2kKCk1vbiBTZXAgMjkgMTU6MTU6MDggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgU0FYMi5jIGMxNG4uYyBjYXRhbG9nLmMgY29uZmlndXJlLmluIGRlYnVnWE1MLmMKCSAgZW5jb2RpbmcuYyBlbnRpdGllcy5jIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHBhcnNlci5jIHJlbGF4bmcuYwoJICB0ZXN0QXV0b21hdGEuYyB0ZXN0QzE0Ti5jIHRlc3RIVE1MLmMgdGVzdFJlZ2V4cC5jIHRlc3RSZWxheC5jCgkgIHRlc3RTY2hlbWFzLmMgdGVzdFhQYXRoLmMgdGhyZWFkcy5jIHRyZWUuYyB2YWxpZC5jIHhtbElPLmMKCSAgeG1sY2F0YWxvZy5jIHhtbGxpbnQuYyB4bWxtZW1vcnkuYyB4bWxyZWFkZXIuYyB4bWxzY2hlbWFzLmMKCSAgZXhhbXBsZS9nam9icmVhZC5jIGluY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmggaW5jbHVkZS9saWJ4bWwvYzE0bi5oCgkgIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBpbmNsdWRlL2xpYnhtbC9kZWJ1Z1hNTC5oCgkgIGluY2x1ZGUvbGlieG1sL2VudGl0aWVzLmggaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaAoJICBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaAoJICBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmggaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCgkgIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmggcHl0aG9uL2xpYnhtbC5jOgoJICBPa2F5IHRoaXMgaXMgc2NhcnkgYnV0IGl0IGlzIGp1c3QgYWRkaW5nIGEgY29uZmlndXJlIG9wdGlvbgoJICB0byBkaXNhYmxlIG91dHB1dCwgdGhpcyB0b3VjaGVzIG1vc3Qgb2YgdGhlIGZpbGVzLgoKTW9uIFNlcCAyOSAxMjo1Mzo1NiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbWVtb3J5LmM6IGJldHRlciBmaXgsIGF2b2lkcyBicmVha2luZyB0aGUgcHl0aG9uIGJpbmRpbmdzCgpNb24gU2VwIDI5IDExOjIxOjMzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogZml4IGEgY29tcGlsYXRpb24gcHJvYmxlbSB3aGVuIGNvbmZpZ3VyaW5nCgkgIHdpdGggZGVidWcgYnV0IHdpdGhvdXQgbWVtLWRlYnVnCgpTdW4gU2VwIDI4IDIwOjUzOjE3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cCwgY3JlYXRpbmcgYSBuZXcgbGVnYWN5LmMgbW9kdWxlLAoJICBtYWRlIHN1cmUgbWFrZSB0ZXN0cyByYW4gaW4gcmVkdWNlZCBjb25kaXRpb25zCgkqIFNBWC5jIFNBWDIuYyBjb25maWd1cmUuaW4gZW50aXRpZXMuYyBnbG9iYWxzLmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHZhbGlkLmMgeGxpbmsuYyB4bWxJTy5jIHhtbGNhdGFsb2cuYwoJICB4bWxtZW1vcnkuYyB4cGF0aC5jIHhtbG1lbW9yeS5jIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgaW5jcmVhc2VkIHRoZSBtb2R1bGFyaXphdGlvbiwgYWxsb3cgdG8gY29uZmlndXJlIG91dCAKCSAgdmFsaWRhdGlvbiBjb2RlIGFuZCBsZWdhY3kgY29kZSwgYWRkZWQgYSBjb25maWd1cmF0aW9uCgkgIG9wdGlvbiAtLXdpdGgtbWluaW11bSBjb21waWxpbmcgb25seSB0aGUgbWFuZGF0b3J5IGNvZGUKCSAgd2hpY2ggdGhlbiBzaHJpbmsgdG8gMjAwS0IuCgpTdW4gU2VwIDI4IDAyOjE1OjA3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4IGEgYnVnIHJhaXNlZCBieSB0aGUgTWlwcyBjb21waWxlci4KCSogaW5jbHVkZS9saWJ4bWwvU0FYLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IG1vdmUgdGhlIAoJICBTQVh2MSBibG9jayBkZWZpbml0aW9ucyB0byBwYXJzZXIuaCBmaXhlcyBidWcgIzEyMzM4MAoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogcmVpbnN0YW5jaWF0ZQoJICB0aGUgYXR0cmlidXRlIGFuZCBlbGVtZW50IHBvb2wgYm9ya2VuIDIgY29tbWl0cyBhZ28uCgkgIFN0YXJ0IHBsYXlpbmcgd2l0aCBhbiBlbnRyeSBwb2ludCB0byBwcmVzZXJ2ZSBhIHN1YnRyZWUuCgkqIGVudGl0aWVzLmM6IHJlbW92ZSBhIHdhcm5pbmcuCgpTYXQgU2VwIDI3IDEyOjE5OjM4IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZW5jb2RpbmcuYywgcGFyc2VyLmMsIHJlbGF4bmcuYzogZnVydGhlciAoZmluYWw/KSBtaW5vcgoJICBjaGFuZ2VzIGZvciBjb21waWxhdGlvbiB3YXJuaW5ncy4gTm8gY2hhbmdlIHRvIGxvZ2ljLgoKRnJpIFNlcCAyNiAxODowMzo0MiBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHBhcnNlci5jOiBmaXhlZCBzbWFsbCBwcm9ibGVtIHdpdGggbWlzc2luZyBlbnRpdGllcyAodGVzdC9lbnQyKQoKU2F0IFNlcCAyNyAwMToyNTozOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IFdpbGxpYW0ncyBjaGFuZ2UgYWxsb3dlZCB0byBzcG90IGEgbmFzdHkgYnVnIGluIHhtbERvUmVhZAoJICBpZiB0aGUgcmVzdWx0IGlzIG5vdCB3ZWxsIGZvcm1lZCB0aGF0IGN0eHQtPm15RG9jIGlzIG5vdCBOVUxMCgkgIGFuZCB1c2VzIHRoZSBjb250ZXh0IGRpY3Rpb25uYXJ5LgoKRnJpIFNlcCAyNiAyMTowOTozNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IG90aGVyIHBhdGNoZXMgZnJvbSBXaWxsaWFtIEJyYWNrIHRvIGF2b2lkCgkgIGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9uIEFJWC4KCkZyaSBTZXAgMjYgMTE6MDM6MDggUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyLmMsIGVudGl0aWVzLmMsIHhtbHJlYWRlci5jOiBtaW5vciBjaGFuZ2UgdG8KCSAgYXZvaWQgY29tcGlsYXRpb24gd2FybmluZ3Mgb24gc29tZSAoZS5nLiBBSVgpIHN5c3RlbXMKCkZyaSBTZXAgMjYgMTY6NDk6MjUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCBhIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcHJvYmxlbQoJICB3aGVuIGZvcm1hdHRpbmcgImRlcHJlY2F0ZWQgU0FYdjEgZnVuY3Rpb24gaWdub3JhYmxlV2hpdGVzcGFjZSIKCSAgY291bGQgYmUgcmVwcm9kdWNlZCBieSB4bWxsaW50IC0tZm9ybWF0CgpGcmkgU2VwIDI2IDE1OjUwOjQ0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbGlieG1sMi1hcGkueG1sOiByZWJ1aWx0IHRoZSBBUEkKCSogeG1sbGludC5jIGRvYy94bWxsaW50LjEgZG9jL3htbGxpbnQueG1sOiBhZGRlZCB0aGUgbmV3IG9wdGlvbnMKCSAgLS1ub2NkYXRhIGFuZCAtLW5zY2xlYW4gdG8gcmVtb3ZlIENEQVRBIHNlY3Rpb24gYW5kIHN1cnBlcmZsdW91cwoJICBuYW1lc3BhY2UgZGVjbGFyYXRpb25zCgkqIHBhcnNlci5jIFNBWDIuYzogaW1wbGVtZW50YXRpb24gb2YgdGhlIDIgbmV3IG9wdGlvbnMKCkZyaSBTZXAgMjYgMTQ6NDE6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB0ZXN0SFRNTC5jIHhtbGxpbnQuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6CgkgIGFkZGVkIHRoZSBzYW1lIGh0bWxSZWFkIEFQSXMgdGhhbiB0aGVpciBYTUwgY291bnRlcnBhcnRzCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBuZXcgcGFyc2VyIG9wdGlvbnMsIG5vdCB5ZXQgaW1wbGVtZW50ZWQsCgkgIGFkZGVkIGFuIG9wdGlvbnMgZmllbGQgdG8gdGhlIGNvbnRleHQuCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBTaGF1biBNY0NhbmNlIHRvIGZpeCBidWcgIzEyMzIzOCB3aGVuIF1dPgoJICBpcyBmb3VuZCB3aXRoaW4gYSBjZGF0YSBzZWN0aW9uLgoJKiByZXN1bHQvbm9lbnQvY2RhdGEyIHJlc3VsdC9jZGF0YTIgcmVzdWx0L2NkYXRhMi5yZHIKCSAgcmVzdWx0L2NkYXRhMi5zYXggdGVzdC9jZGF0YTI6IGFkZCBvbmUgbW9yZSBjZGF0YSB0ZXN0CgpUaHUgU2VwIDI1IDIzOjAzOjIzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB4bWxsaW50LmMgZG9jL2xpYnhtbDItYXBpLnhtbCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDoKCSAgQ2hhbmdlZCB0aGUgbmV3IHhtbFJlYWQveG1sQ3R4dFJlYWQgQVBJcyB0byBoYXZlIGFuIGV4dHJhCgkgIGJhc2UgVVJMIHBhcmFtZXRlciB3aGVuIG5vdCBsb2FkaW5nIGZyb20gYSBmaWxlIG9yIFVSTC4KClRodSBTZXAgMjUgMTY6MjM6NTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGEgYmV0YTMgc29sdmluZyB0aGUgQUJJIHByb2JsZW1zCgkqIGdsb2JhbHMuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0ZXN0SFRNTC5jIEhUTUxwYXJzZXIuYyBTQVguYwoJICBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvU0FYLmg6IG1ha2Ugc3VyZSB0aGUKCSAgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIGRlZmF1bHQgU0FYIGhhbmRsZXIgYXJlIFYxIG9uZXMgdG8KCSAgYXZvaWQgQUJJIGNvbXBhdCBwcm9ibGVtcy4KCSogeG1scmVhZGVyLmM6IGNsZWFudXAgb2YgdW5lZWRlZCBjb2RlCgkqIGhhc2guYzogZml4IGEgY29tbWVudAoKVGh1IFNlcCAyNSAxNDoxNjo1MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIGhhc2guYyBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmggCgkgIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjoKCSAgZml4aW5nIHNvbWUgY29tbWVudHMgdG8gYXZvaWQgd2FybmluZ3MgZnJvbSBhcGlidWlsZC5weQoKV2VkIFNlcCAyNCAyMzo0MjowOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBwYXRjaCBmcm9tIFN0ZXBoYW5lIEJpZG91bCBmb3IgY29uZmlndXJpbmcKCSAgdGhlIGJldGEyIHZlcnNpb24gIzEyMzEwNAoKV2VkIFNlcCAyNCAyMzoxNzo1OSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGFkZGluZyByZXBlYXRlZCBwYXJzaW5nIGFuZCB2YWxpZGF0aW5nIHRlc3RzCgkqIFNBWDIuYyBwYXJzZXIuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IG1ha2UgdGhlIG5ldwoJICBET00gdHJlZSBidWlsZGluZyBpbnRlcmZhY2VzIHVzZSB0aGUgZGljdGlvbmFyeSBmcm9tIHRoZSAKCSAgcGFyc2luZyBjb250ZXh0IHRvIGJ1aWxkIHRoZSBlbGVtZW50IGFuZCBhdHRyaWJ1dGVzIG5hbWVzCgkgIGFzIHdlbGwgYXMgZm9ybWF0dGluZyBzcGFjZXMgYW5kIHNob3J0IHRleHQgbm9kZXMKCSogaW5jbHVkZS9saWJ4bWwvZGljdC5oIGRpY3QuYzogYWRkZWQgc29tZSByZWZlcmVuY2UgY291bnRpbmcKCSAgZm9yIHhtbERpY3RQdHIgYmVjYXVzZSB0aGV5IGNhbiBiZSBzaGFyZWQgYnkgZG9jdW1lbnRzIGFuZAoJICBhIHBhcnNlciBjb250ZXh0LgoJKiB4bWxyZWFkZXIuYzogYSBiaXQgb2YgY2xlYW51cCwgcmVtb3ZlIHRoZSBzcGVjaWZpYyB0cmVlIGZyZWVpbmcKCSAgZnVuY3Rpb25zIGFuZCB1c2UgdGhlIHN0YW5kYXJkIG9uZXMgbm93LgoJKiB4bWxsaW50LmM6IGFkZCAtLW5vZGljdAoJKiBweXRob24vbGlieG1sLmM6IGZpeCBhIHN0dXBpZCBidWcgc28gdGhhdCBucygpIHdvcmtzIG9uIAoJICBhdHRyaWJ1dGUgbm9kZXMuCgpUdWUgU2VwIDIzIDIzOjA3OjQ1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogYWRkaW5nIGEgbmV3IHNldCBvZgoJICBBUEkgZm9yIHBhcnNpbmcgeG1sUmVhZERvYygpIHhtbFJlYWRGaWxlKCkgLi4uIHhtbFJlYWRJTygpCgkgIGFuZCB4bWxDdHh0UmVhZERvYygpIC4uLiB4bWxDdHh0UmVhZElPKCkuIFRoYXQgd2l0aAoJICBhIGNsZWFyIGRlZmluZSBvZiB4bWxQYXJzZXJPcHRpb24sIHhtbEN0eHRVc2VPcHRpb25zKCkKCSAgc2hvdWxkIHNpbXBsaWZ5IGN1c3RvbSBwYXJzaW5nIHdpdGhvdXQgYmVpbmcgdGVtcHRlZCB0bwoJICB1c2UgZ2xvYmFsIHZhcmlhYmxlcywgYW5kIHhtbEN0eHRSZXNldCgpIHNob3VsZCBhbGxvdyByZXVzZQoJICBvZiBhIGNvbnRleHQgZm9yIG11bHRpcGxlIHBhcnNpbmcuCgkqIHhtbGxpbnQuYzogc3dpdGNoZWQgdG8gdXNlIHhtbFJlYWRYWFgsIGFsbG93IG9wdGlvbnMgdG8KCSAgYmUgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIGxlc3MgdHJvdWJsZXMuCgkqIHRyZWUuYzogc2ltcGxlIHdhcm5pbmcgcmVtb3ZhbAoJKiBkb2MvYXBpYnVpbGQucHk6IHNtYWxsIGZpeAoJKiBkb2MvbGlieG1sMi1hcGkueG1sIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogdXBkYXRlZAoKVHVlIFNlcCAyMyAxMToxNToyMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHJldmVydCB4bWxDcmVhdGVEb2NQYXJzZXJDdHh0KCkgc2luY2UgdGhpcyBicmVhawoJICB0aGUgcGFyc2VEb2MoKSBweXRob24gYmluZGluZ3MKClR1ZSBTZXAgMjMgMTE6MDA6MTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBtYWtlIHN1cmUgeG1sRGV0ZWN0U0FYMigpIGlzIGNhbGxlZCBvbmx5IGF0IAoJICBwYXJzaW5nIHRpbWUgdG8gYXZvaWQgYnJlYWtpbmcgYXBwcyBjaGFuZ2luZyB0aGUgU0FYCgkgIGNhbGxiYWNrcyBhZnRlciBjb250ZXh0IGFsbG9jYXRpb24sIGNoYW5nZSB4bWxDcmVhdGVEb2NQYXJzZXJDdHh0KCkKCSAgdG8gdXNlIGFuIGltbXV0YWJsZSBidWZmZXIgaW5zdGVhZCBvZiBhIGNvcHkKClR1ZSBTZXAgMjMgMDk6NDA6MzMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBNYXJrdXMgS2VpbSBmaXhpbmcgYSBwcm9ibGVtCgkgIHdpdGggSS9PIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbi4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogZml4ZWQgIzEyMjk5NCBjb21tZW50IG51bWJlcmluZwoJICBmb3IgeG1sUGFyc2VyRXJyb3JzCgpNb24gU2VwIDIyIDEyOjIxOjExIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiB0aGUgdXJpIGFyZyB0byB4bWxOb2RlU2V0QmFzZSBpcwoJICByZWFsbHkgYSBjb25zdCB4bWxDaGFyKgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogYWRkaW4gdGhlCgkgIHhtbFRleHRSZWFkZXJDb25zdFN0cmluZygpIHRvIGdldCBhbiBpbnRlcm5lZCBzdHJpbmcgZnJvbQoJICB0aGUgcmVhZGVyCgpTdW4gU2VwIDIwIDE3OjIyOjIwIFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZXJyb3IuYzogZml4ZWQgYSB3YXJuaW5nIG1lc3NhZ2UgKHRyaXZpYWwpCgkqIGRvYy9zZWFyY2gucGhwOiByZW1vdmVkIGluY29ycmVjdCB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiB3b3JkCgkgIHNlYXJjaCBub3QgZm91bmQgaW4gbGFzdCBvZiBtdWx0aXBsZSB0YWJsZXMgKGJ1ZyAxMTk1MzUpCgpGcmkgU2VwIDE5IDE0OjI2OjI4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBhIDIuNi4wLWJldGEyIHJlbGVhc2UKCSogeG1sSU8uYzogYXZvaWQgYSB3YXJuaW5nCgkqIHRyZWUuYzogYXZvaWQgZHVwbGljYXRlIGNvZGUgaW4geG1sUmVwbGFjZU5vZGUgYXMgcG9pbnRlZCBvdXQKCSAgYnkgQ2hyaXMgUnlsYW5kCgkqIGluY2x1ZGUvbGlieG1sL2RpY3QuaDogYWRkIGEgUU5hbWUgYWNjZXNzIGxvb2t1cCB0byB0aGUKCSAgZGljdGlvbmFyeS4KCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IGFkZGluZyBjb25zdCBhY2Nlc3MKCSAgYmFzZWQgb24gdGhlIGRpY3Rpb25hcnkgaW50ZXJmYWNlIGZvciBzdHJpbmcgcmVhZCBmcm9tIHRoZQoJICByZWFkZXIsIHRoZSBub2RlIGNvbnRlbnQgYWNjZXNzIGlzIHN0aWxsIFRPRE8sIGl0J3MgdG9vIGRpZmZlcmVudAoKRnJpIFNlcCAxOSAwMDowMTowOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jOiBmaXhpbmcgbmFtZXNwYWNlIERURCB2YWxpZGF0aW9ucwoJKiByZXN1bHQvdmFsaWQvbnMyLnhtbCByZXN1bHQvdmFsaWQvbnMueG1sOiB0aGUgb3V0cHV0IG9mIGRlZmF1bHRlZAoJICBuYW1lc3BhY2VzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBub3cuCgkqIE1ha2VmaWxlLmFtOiByZXBvcnQgdGhlIG1lbW9yeSB1c2VkIGluIFRpbWluZ3Rlc3RzIChhcyB3ZWxsIGFzIHRpbWUpCgpUaHUgU2VwIDE4IDE1OjI5OjQ2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYWRkIHN0cmVhbWluZyBvbiBtZW1vcnkgcmVncmVzc2lvbiB0ZXN0cywgZm91bmQKCSAgYmFkIGJ1Z3MgaW4gdGhlIHJlYWRlciBpbnRlcmZhY2UKCSogeG1scmVhZGVyLmM6IGZpeGluZyBidWdzIHcuci50LiB2ZXJ5IGxhcmdlIG5hbWVzLCBhbmQgc3BlY2lhbAoJICBjb25kaXRpb24gaW4gZW5kIG9mIGZpbGUuCgkqIHhtbElPLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOgoJICBhZGRpbmcgaW1tdXRhYmxlIGJ1ZmZlcnMsIGFuZCBwYXJzZXIgaW5wdXQgYmFzZWQgb24gdGhvc2UsCgkgIGJ1dCB0aGlzIHNob3VsZCBub3QgYmUgdXNlZCAoeWV0KSBmb3IgZ2VuZXJhbCBwYXJzaW5nCgkqIHBhcnNlci5jOiBhZGRlZCBhIGNvbW1lbnQgYWJvdXQgdXNpbmcgaW1tdXRhYmxlIGJ1ZmZlcnMgZm9yCgkgIGdlbmVyYWwgcGFyc2luZy4KCSogcmVzdWx0L2JpZ25hbWUueG1sLnJkciByZXN1bHQvYmlnbmFtZTIueG1sLnJkcjogZml4aW5nIHRoZQoJICBvdXRwdXQgb2YgdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCSogeG1sbGludC5jOiB1c2luZyB0aGUgaW1tdXRhYmxlIGJ1ZmZlcnMgd2hlbiBzdHJlYW1pbmcgb24KCSAgbW1hcGVkIGZpbGUgKC0tc3RyZWFtIC0tbWVtb3J5KQoKVGh1IFNlcCAxOCAxMjowNDo1MCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGljdC5jOiB0aGUgbGFzdCBwYXRjaCBicm9rZSB1bmljaXR5IG9mIHJldHVybmVkIHN0cmluZ3MsIHJlbW92ZWQKClRodSBTZXAgMTggMDA6MzE6MDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBhZGQgYSBUaW1pbmd0ZXN0cyB0YXJnZXQgdG8gY2hlY2sgYmFkIGJlaGF2aW91cgoJICBmcm9tIHRoZSBzdHJlYW1pbmcgZW5naW5lCgkqIGRiZ2VuLnBsIGRiZ2VuYXR0ci5wbDogcGVybCBzY3JpcHQgdG8gZ2VuZXJhdGUgYmlnIGluc3RhbmNlcwoJKiB4bWxyZWFkZXIuYzogZml4IGEgYmFkIGJlaGF2aW91ciBvbiBsYXJnZSBidWZmZXIgaW5wdXRzCgpXZWQgU2VwIDE3IDIzOjI1OjQ3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmMgeG1scmVhZGVyLmM6IHR3byBzbWFsbCBpbXByb3ZlbWVudHMKCldlZCBTZXAgMTcgMjI6NTM6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBhdm9pZCBhIGxlYWsgd2l0aCBwcmV2aW91cyBwYXRjaAoKV2VkIFNlcCAxNyAyMjowNjoxMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiB1c2Ugc3RkZXJyIGFuZCBub3Qgc3Rkb3V0IGZvciBkZWZhdWx0IGVycm9ycwoJICBpbiBweXRob24gZW52aXJvbm1lbnQgYnVnICMxMjI1NTIKCldlZCBTZXAgMTcgMjE6MzM6NTcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBzbWFsbCBmaXggZnJvbSBSb2IgUmljaGFyZHMgZm9yIGlucHV0IGZpbGVuYW1lCgkqIHhtbGxpbnQuYzogZml4ZXMgZm9yIC0tcmVwZWF0IGFuZCAtLW1lbW9yeS8tLXN0cmVhbSBmb3Igc3BlZWQgdGVzdHMKCSogeG1sSU86IGFkZGluZyBhIGd1YXJkIGluIG9uZSBmdW5jdGlvbgoKV2VkIFNlcCAxNyAxNTo1Nzo0NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBtb3JlIHBlcmZvcm1hbmNlIGh1bnRpbmcKCSAgcmVkdWNpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWUgYW5kIGF2b2lkaW5nIGV4cGVuc2l2ZSByb3V0aW5lcwoKV2VkIFNlcCAxNyAxMjoyMzo0MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYMi5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHhtbHJlYWRlci5jOiBzdGFydGVkIG1lc3NpbmcKCSAgc2VyaW91c2x5IHdpdGggcGVyLWRvY3VtZW50IGRpY3QgYW5kIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcwoJICByZXVzZSBpbiB0aGUgeG1sUmVhZGVyLiBUaGlzIHNlZW1zIHRvIGxlYWQgdG8gYW4gaW50ZXJlc3RpbmcKCSAgc3BlZWR1cCBvZiB0aGUgeG1sUmVhZGVyIGFscmVhZHkuCgpXZWQgU2VwIDE3IDAxOjA3OjU2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmMgaW5jbHVkZS9saWJ4bWwvZGljdC5oOiBkbyBzdHJpbmcgYWxsb2NhdGlvbnMgaW4gbGFyZ2UKCSAgcG9vbHMsIGFsbG93aW5nIHRvIGZpbmQgaWYgYSBzdHJpbmcgcGVydGFpbiB0byBhIGRpY3QgcXVpY2tseQoJKiB4bWxsaW50LmM6IGZpeCAtLXN0cmVhbSAtLXJlcGVhdCAtLXRpbWluZwoJKiBNYWtlZmlsZS5hbTogdGhlIHRlc3RUaHJlYWRzIHJ1biBvdXRwdXQgc2hvdWxkIGJlIHNlZW4uCgpNb24gU2VwIDE1IDE2OjQ2OjI4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IHN0YXJ0aW5nIHdvcmsgb24gcmV1c2luZyB0aGUKCSAgcGFyc2VyIGRpY3Rpb25hcnkgZm9yIHRoZSBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgdGFnIG5hbWVzLgoJICBBZGQgcG9vbHMgZm9yIEVsZW1lbnQgYW5kIEF0dHJpYnV0ZXMgaW4gdGhlIHBhcnNlciBjb250ZXh0LAoJICB3aGljaCBzaG91bGQgaGVscCBzcGVlZGluZyB1cCB0aGUgcmVhZGVyLgoJKiBNYWtlZmlsZS5hbSByZXN1bHQvKi5yZHIgOiBhZGRpbmcgbm9uLXB5dGhvbiByZWFkZXIgcmVncmVzc2lvbgoJICB0ZXN0cy4KCk1vbiBTZXAgMTUgMTQ6NTQ6NDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWDIuYyBwYXJzZXIuYyB2YWxpZC5jOiBzdGFydGluZyB0byBjbGVhbnVwIHNvbWUgb2YgdGhlCgkgIHByb2JsZW1zIGV4cG9zZWQgYnkgdGhlIFczQy9OSVNUIHJlZ3Jlc3Npb24gc3VpdGUuCgkqIHJlc3VsdC9lbnQ3LnNheCByZXN1bHQveG1sMi5zYXg6IHNtYWxsIGZpeGVzLgoKTW9uIFNlcCAxNSAxMTo0Njo0NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IG1vcmUgcGFyc2VyIGVycm9yIGZhY3RvcmluZwoKU3VuIFNlcCAxNCAyMTo1MzozOSBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIEhUTUx0cmVlLmM6IEZpeGVkIGJ1ZyAxMjEzOTQgLSBtaXNzaW5nIG5zIG9uIGF0dHJpYnV0ZXMKClN1biBTZXAgMTQgMjE6NDM6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmg6IGZhY3RvcmluZyBvZiBtb3JlIAoJICBlcnJvciBoYW5kbGluZyBjb2RlLCBzZXJpb3VzIHNpemUgcmVkdWN0aW9uIGFuZCBtb3JlIGxpc2liaWxpdHkKCSAgb2YgdGhlIHJlc3VsdGluZyBjb2RlLgoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaAoJICBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogY2hhbmdpbmcgdGhlIHdheSBWQzpQcm9wZXIgR3JvdXAvUEUgTmVzdGluZwoJICBjaGVja3MgYXJlIGRvbmUsIHVzZSBhIGNvdW50ZXIgZm9yIGVudGl0aWVzLiBFbnRpdGllcyB3aGVyZSBmcmVlZCBhbmQKCSAgcmVhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgYWRkcmVzcyBmYWlsaW5nIHRoZSBjaGVjay4KCSogdHJlZS5jOiBhdm9pZCBhIHdhcm5pbmcKCSogcmVzdWx0L3ZhbGlkLyogcmVzdWx0L1ZDLyo6IHRoaXMgc2xpZ2h0bHkgY2hhbmdlcyBzb21lIHZhbGlkYXRpb24KCSAgZXJyb3IgbWVzc2FnZXMuCgpTdW4gU2VwIDE0IDExOjAzOjI3IFBEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogdmFsaWQuYzogZml4ZWQgYnVnIDEyMTc1OSAtIGVhcmx5IGRlY2xhcmF0aW9uIG9mCgkgIGF0dHJpYnV0ZS1saXN0IGluIGV4dGVybmFsIERURAoKU2F0IFNlcCAxMyAxNDo0MjoxMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogc3RhcnRpbmcgY2xlYW5pbmcgdXAKCSAgZXJyb3IgaGFuZGxpbmcsIGZhY3Rvcml6ZSBlcnJvciBwcm9jZXNzaW5nCgkqIGRvYy94bWxsaW50Lmh0bWw6IHVwZGF0ZSBvZiB0aGUgcGFnZSwgcmVtb3ZlIC0tc2dtbAoKU2F0IFNlcCAxMyAwMjoxMzo1MCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gRE9DQnBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRlc3REb2Nib29rLmMKCSAgeG1sbGludC5jIGRvYy94bWxsaW50LnhtbCBkb2MveG1sbGludC4xOiByZW1vdmluZyB0aGUgCgkgIGJyb2tlbiBwc2V1ZG8gU0dNTCBEb2NCb29rIHBhcnNlciBjb2RlLgoKRnJpIFNlcCAxMiAxNzoyNDoxMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4IGEgcHJvYmxlbSB3aXRoIHN0cmNweSgpIGluIHhtbFhQYXRoRm9ybWF0TnVtYmVyKCkKCSAgdmFsZ3JpbmQgcG9pbnRlZCBvdXQgdGhlIHN0cmluZ3Mgb3ZlcmxhcHBlZC4gY2xlYW51cCAuCgpGcmkgU2VwIDEyIDExOjQzOjEyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgc3BlZWR1cCB0byB4bWxTZWFyY2hOcygpIGFzIHN1Z2dlc3RlZCBieQoJICBMdWNhIFBhZG92YW5pLiBDbGVhbmVkIHVwIHhtbFNlYXJjaE5zQnlIcmVmKCkgaW4gdGhlIHByb2Nlc3MKCSAgYXBwbHlpbmcgdGhlIHNhbWUgdHJpY2suCgpGcmkgU2VwIDEyIDAxOjM2OjIwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYWRkaW5nIG5hbWVzcGFjZSBjaGVja2luZ3MKCSAgd2hpbGUgbWFraW5nIHN1cmUgdGhleSBzdGlsbCBwYXJzZSBhcyB3ZWxsZm9ybWVkIGRvY3VtZW50cy4KCSAgQWRkIGFuIG5zV2VsbEZvcm1lZCBzdGF0dXMgcmVwb3J0IHRvIHRoZSBjb250ZXh0LCBhbmQgCgkgIHByb3ZpZGUgbmV3IGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzLgoJKiBNYWtlZmlsZS5hbSByZXN1bHQvbmFtZXNwYWNlcy8qIHRlc3QvbmFtZXNwYWNlcy8qOiBhZGQgCgkgIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdGluZyBmb3IgdGhlIG5ldyBuYW1lc3BhY2Ugc3VwcG9ydAoJKiB0ZXN0L2F0dDUgcmVzdWx0L25vZW50L2F0dDUgcmVzdWx0L2F0dDUgcmVzdWx0L2F0dDUuc2F4OgoJICBhZGQgbW9yZSBjb3ZlcmFnZSBmb3IgdGhlIGF0dHJpYnV0ZSBwYXJzaW5nIGFuZCBub3JtYWxpemF0aW9uCgkgIGNvZGUuCgpGcmkgU2VwIDEyIDAxOjM0OjE5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0aHJlYWRzLmM6IGJhY2twb3J0IG9mIGEgdGhyZWFkIGJ1Z2ZpeCBmcm9tIDJfNV9YIGJyYW5jaAoKVGh1IFNlcCAxMSAxODoyOToxOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgYnVnIGluIG9uZSBjb3JuZXIgY2FzZSBvZiBhdHRyaWJ1dGUgcGFyc2luZy4KClRodSBTZXAgMTEgMTY6MjE6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKiA6IDIuNi4wYmV0YTEgY2hhbmdlcwoJKiBTQVgyLmMgaGFzaC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBGaXhpbmcgYXR0cmlidXRlCgkgIG5vcm1hbGl6YXRpb24sIG1pZ2h0IG5vdCBiZSB0b3RhbGx5IGZpeGVkIGJ1dCB0aGlzIHNob3VsZCAKCSAgbWFrZSBzdXJlIFNBWCBldmVudCBwcm92aWRlIHRoZSByaWdodCBzdHJpbmdzIGZvciBhdHRyaWJ1dGVzCgkgIGV4Y2VwdCBlbnRpdGllcyBmb3Igd2hpY2ggbGlieG1sMiBpcyBkaWZmZXJlbnQgYnkgZGVmYXVsdAoJICBUaGlzIHNob3VsZCBmaXggIzEwOTU2NAoJKiByZXN1bHQvYXR0cmliLnhtbC5zYXggcmVzdWx0L2VudDMuc2F4IHJlc3VsdC9wM3Auc2F4OiBtaW5vciBjaGFuZ2VzCgkgIGluIGF0dHJpYnV0ZSBjYWxsYmFjayB2YWx1ZXMKCSogcmVzdWx0L2MxNG4vd2l0aC1jb21tZW50cy9leGFtcGxlLTQKCSAgcmVzdWx0L2MxNG4vd2l0aG91dC1jb21tZW50cy9leGFtcGxlLTQ6IHRoaXMgYWxzbyBmaXhlcyBhIHN1YnRsZQoJICBidWcgaW4gdGhlIGNhbm9uaWNhbGl6YXRpb24gdGVzdHMuCgpXZWQgU2VwIDEwIDEyOjM4OjQ0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJVGltZSB0byBjb21taXQgMyBkYXlzIG9mIHdvcmsgcmV3cml0aW5nIHRoZSBwYXJzZXIgaW50ZXJuYWwsCglmaXhpbmcgYnVncyBhbmQgbWlncmF0aW5nIHRvIFNBWDIgaW50ZXJmYWNlIGJ5IGRlZmF1bHQuIFRoZXJlCglpcyBzb21lIHdvcmsgbGV0ZiBUT0RPLCBsaWtlIG5hbWVzcGFjZSB2YWxpZGF0aW9uIGFuZCBhdHRyaWJ1dGVzCglub3JtYWxpemF0aW9uICh0aGlzIGJyZWFrIEMxNE4gcmlnaHQgbm93KQoJKiBNYWtlZmlsZS5hbTogZml4ZWQgdGhlIHRlc3QgcnVsZXMKCSogaW5jbHVkZS9saWJ4bWwvU0FYMi5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIFNBWDIuYyBwYXJzZXIuYwoJICBwYXJzZXJJbnRlcm5hbHMuYzogY2hhbmdpbmcgdGhlIHBhcnNlciwgbWlncmF0aW5nIHRvIFNBWDIsCgkgIGFkZGluZyBuZXcgaW50ZXJmYWNlIHRvIHN3aXRjaCBiYWNrIHRvIFNBWDEgb3IgaW5pdGlhbGl6ZSBhCgkgIFNBWCBibG9jayBmb3IgdjEgb3IgdjIuIE1vc3Qgb2YgdGhlIG5hbWVzcGFjZSB3b3JrIGlzIGRvbmUKCSAgYmVsb3cgU0FYLCBhcyB3ZWxsIGFzIGF0dHJpYnV0ZSBkZWZhdWx0aW5nCgkqIGdsb2JhbHMuYzogY2hhbmdlZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGVmYXVsdCBTQVggaGFuZGxlcnMKCSogaGFzaC5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9oYXNoLmg6IGFkZGVkIFFOYW1lIHNwZWNpZmljIGhhbmRsaW5nCgkqIHhtbElPLmM6IHNtYWxsIGZpeAoJKiB4bWxsaW50LmMgdGVzdFNBWC5jOiBwcm92aWRlIGEgLS1zYXgxIHN3aXRjaCB0byB0ZXN0IHRoZSBvbGQKCSAgdmVyc2lvbiBjb2RlIHBhdGgKCSogcmVzdWx0L3AzcCByZXN1bHQvcDNwLnNheCByZXN1bHQvbm9lbnQvcDNwIHRlc3QvcDNwOiB0aGUgbmV3IGNvZGUKCSAgcG9pbnRlZCBvdXQgYSB0eXBvIGluIGEgdmVyeSBvbGQgdGVzdCBuYW1lc3BhY2UKClN1biBTZXAgIDcgMTk6NTg6MzMgUFREIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmggcGFyc2VyLmM6IEltcGxlbWVudGVkIGRldGVjdGlvbgoJICBvZiBjb21wcmVzc2VkIGZpbGVzLCBzZXR0aW5nIGRvYy0+Y29tcHJlc3NlZCBhcHByb3ByaWF0ZWx5CgkgIChidWcgIzEyMDUwMykuCgpTdW4gU2VwICA3IDIyOjUzOjA2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdHJ5IHRvIGNvcGUgd2l0aCB0aGUgZmFjdCB0aGF0IGFwcHMgbWF5IHN0aWxsCgkgIGhhdmUgYWxsb2NhdGVkIHNtYWxsZXIgU0FYIGNhbGxiYWsgYmxvY2sKClN1biBTZXAgIDcgMTE6MTE6NDUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRpY3QuYzogYWxsb3cgdG8gZ2l2ZSAtMSBmb3IgdW5kZWZpbmVkIGxlbmd0aCBpbiBsb29rdXBzCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRlc3RTQVguYzoKCSAgZmlyc3Qgcm91bmQgb2Ygd29yayBvbiB0aGUgbmV3IFNBWDIgaW50ZXJmYWNlcywgdGhlIEFQSQoJICB3aWxsIGNoYW5nZSBidXQgY29tbWl0aW5nIGJlZm9yZSBjaGFuZ2luZyBmb3IgaGlzdG9yaWNhbAoJICByZWZlcmVuY2UuCgpTYXQgU2VwICA2IDEwOjU1OjAxIFBURCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogU0FYMi5jLCB4bWxJTy5jOiBmaXhlZCBidWcgIzEyMTIxMCAoY2FsbGJhY2sgdG8gc2F4LT5lcnJvciwKCSAgc2F4LT53YXJuaW5nIHdpdGggd3JvbmcgcGFyYW1zKS4KCkZyaSBTZXAgIDUgMTA6MzM6NDIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaDogcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgdG8gZXhwb3J0CgkgIGdsb2JhbHMgZW50cnkgcG9pbnRzIHRvIHRoZSBweXRob24gYmluZGluZ3MKCldlZCBTZXAgIDMgMTU6MjQ6NDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogd2hlbiBjcmVhdGluZyBhIERPQ1RZUEUgdXNlICJodG1sIiBsb3dlcmNhc2UKCSAgYnkgZGVmYXVsdCBpbnN0ZWFkIG9mICJIVE1MIgoJKiBwYXJzZXIuYyB4bWxyZWFkZXIuYzogb3B0aW1pemF0aW9uLCBnYWluIGEgZmV3ICUgcGFyc2luZyBzcGVlZCBieQoJICBhdm9pZGluZyBjYWxscyB0byAiYXJlQmxhbmtzIiB3aGVuIG5vdCBuZWVkZWQuCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogc29tZSBzdHJ1Y3R1cmUKCSAgZXh0ZW5zaW9ucyBmb3IgZnV0dXJlIHdvcmsgb24gdXNpbmcgcGVyLWRvY3VtZW50IGRpY3Rpb25hcmllcy4KCldlZCBTZXAgIDMgMTU6MDg6MDYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHJlc3VsdHMvKi5zYXggU0FYUmVzdWx0Lyo6IHJlbW92aW5nIHRoZSBTQVhyZXN1bHRzCgkgIHRyZWUsIGtlZXBpbmcgcmVzdWx0IGluIHRoZSBzYW1lIHRyZWUsIGFkZGVkIFNBWHRlc3RzIHRvIHRoZQoJICBkZWZhdWx0ICJtYWtlIHRlc3RzIgoKVHVlIFNlcCAgMiAxNTo1OTowNCBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbGV4cG9ydHMuaDogZGVmaW5lZCBhZGRpdGlvbmFsIG1hY3JvcyB3aGljaAoJICBhZmZlY3QgZXhwb3J0cyBhbmQgYWRkZWQgbWluZ3cgc2VjdGlvbgoKTW9uIFNlcCAgMSAxNToxNToxOCBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9pbmRleC5weTogZml4ZWQgcHJvYmxlbSBwYXJzaW5nIHhodG1sIGRvY3MKCSogZG9jL3htbHJlYWRlci5odG1sLGRvYy9ndWlkZWxpbmVzLmh0bWw6IHNtYWxsIG1vZGlmaWNhdGlvbgoJICB0byBhdm9pZCBwcm9ibGVtIGluIHB5dGhvbiBwYXJzaW5nLgoJKiBkb2Mvc2VhcmNoLnBocDogZml4ZWQgdXBwZXIgY2FzZSBmaWxlbmFtZSBwcm9ibGVtIGZvciBYU0xUIGRvY3MKCk1vbiBTZXAgIDEgMjI6NTU6MDkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IHBhdGNoIGZyb20gTWFyayBWYWtvYyB0aGF0IGFsbG93cyBjb21waWxpbmcgCgkgIHdpdGggWEluY2x1ZGUgYnV0IHdpdGhvdXQgWFBvaW50ZXIgc3VwcG9ydC4KCk1vbiBTZXAgIDEgMjI6MzE6MzggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiB4bWwyLWNvbmZpZy5pbjogQXBwbGllZCBhIHBhdGNoIGZyb20gS2V2aW4gUC4gRmxlbWluZwoJICB0byBhZGQgLS1saWJ0b29sLWxpYnMgb3B0aW9uIHRvIHhtbDItY29uZmlnIHNjcmlwdC4KClN1biBBdWcgMzEgMjE6NTI6MTIgUERUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvUkVBRE1FLmRvY3MsIGRvYy9NYWtlZmlsZS5hbTogbmV3IGZpbGUgYWRkZWQsCgkgIGdpdmluZyBzb21lIGRlc2NyaXB0aW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24gcHJvY2VzcwoJKiBkb2Mvc2VhcmNoLnBocDogZml4ZWQgcHJvYmxlbSB3aXRoIHVwcGVyIGNhc2Ugb24gZmlsZW5hbWVzCgpGcmkgQXVnIDI5IDEyOjI1OjAxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvTWFrZWZpbGUuYmNiOiB1cGRhdGVzIGJ5IEVyaWMgWnVyY2hlcgoKVGh1IEF1ZyAyOCAyMjo1ODozOCBQRFQgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9hcGlidWlsZC5weSwgZG9jL2xpYnhtbDItYXBpLnhtbDogZW5oYW5jZWQgY29kZQoJICB0byBjb21wZW5zYXRlIGZvciBwb2xsdXRpb24gZnJvbSBJZ29yJ3MgaGVhZGVyIHRhaW50CgkgIChxdWljayBiZWZvcmUgRGFuaWVsIG5vdGljZXMpCgpUaHUgQXVnIDI4IDIzOjAxOjM2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVgyLmM6IGZpeGVkIGEgbmFtZXNwYWNlIGVycm9yIG9uIGF0dHJpYnV0ZSByZXBvcnRpbmcgYnVnCgkgIHBvaW50ZWQgb3V0IGJ5IFRvYmlhcyBSZWlmCgkqIHRlc3QvcDNwIHJlc3VsdC9wM3AgcmVzdWx0L25vZW50L3AzcDogdGhpcyB0ZXN0IGNhc2Ugd2FzIHdyb25nCgkgIHVzaW5nIHhtbHNuIGluc3RlYWQgb2YgeG1sbnMuLi4KClRodSBBdWcgMjggMTg6MjU6MDcgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oOiBmaXhlZAoJICB0eXBvcyByZXBvcnRlZCBieSBNYXJrIFZha29jCgpUaHUgQXVnIDI4IDA4OjU5OjUxIE1EVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJYWRkOgoJKiBkb2MvdHV0b3JpYWwvYXBpLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDkuaHRtbAoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZXhwYXRoLmMKCXVwZGF0ZWQKCSogZG9jL3R1dG9yaWFsLyouaHRtbAoJZml4IG15IGJhZCAtIGZvcmdvdCB0byBjaGVjayBpbiBuZXcgZmlsZXMgd2hlbiBJIGxhc3QKCXVwZGF0ZWQKClRodSBBdWcgMjggMTQ6MzE6MTMgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9NYWtlZmlsZS5iY2I6IG5ldyBmaWxlLCBzdXBwb3J0IGZvciBCb3JsYW5kIEMrKwoJKiB4bWxsaW50LmM6IGZpeGVkIHRpbWUgaW5jbHVzaW9uIGZvciB2YXJpb3VzIGNvbXBpbGVycwoKVGh1IEF1ZyAyOCAxMjozMjo1OSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmM6IGFkZGVkCgkgIGZldyBjYXN0cyB0byBzaHV0IHRoZSBjb21waWxlciB3YXJuaW5ncwoKVGh1IEF1ZyAyOCAxMjoyMzo1MSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLiogd2luMzIvY29uZmlndXJlLmpzOiBmaXhlZCBmb3IgbWluZ3cKClRodSBBdWcgMjggMTA6MDE6NDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYyB0aHJlYWRzLmM6IGZpeGluZyBidWcgIzEyMDg3MCB0cnkgdG8gYXZvaWQgcHJvYmxlbQoJICB3aXRoIHVuaW5pdGlhbGl6ZWQgbXV0ZXhlcwoKV2VkIEF1ZyAyNyAxNjoxMjo0MSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBhbiBlcnJvciByZXBvcnRpbmcgYnVnIGluIFJlbGF4LU5HIHdoZW4gd2UgZW5kCgkgIHVwIHdpdGggbXVsdGlwbGUgc3RhdGVzLCBzZWxlY3QgdGhlICJiZXN0IiBvbmUuIEZpeCAjMTIwNjgyCgkqIHJlc3VsdC9yZWxheG5nL3R1dG9yMTFfMl8zLmVycjogc21hbGwgY2hhbmdlIHJlc3VsdGluZyAKCldlZCBBdWcgMjcgMTE6MjU6MjUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhcHBsaWVkIGJhc2U2NCBzdXBwb3J0IHBhdGNoIGZyb20gQW50aG9ueSBDYXJyaWNvCgpXZWQgQXVnIDI3IDEwOjU4OjUxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvW3RocmVhZHMteHBvaW50ZXJdLmg6IHJlYWxpZ25lZCBwYXJhbWV0ZXJzCgkgIGFmdGVyIHRhaW50CgpXZWQgQXVnIDI3IDA5OjU5OjU0IENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oOiBmaXhlZCBkZWZzIGZvciBCb3JsYW5kIGNvbXBpbGVyLAoJICBhcyByZXBvcnRlZCBieSBFcmljIFp1cmNoZXIKClR1ZSBBdWcgMjYgMTU6NTQ6MDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgYnVnICMxMjAzODYgYWdhaW4gYSBwcm9ibGVtIGludHJvZHVjZWQgd2hlbgoJICB0cnlpbmcgdG8gcmV1c2UgYXV0b21hdGEgZm9yIGNvbnRlbnQgdmFsaWRhdGlvbi4gRml4IGEgYnVnIHJlcG9ydAoJICBwcm9ibGVtIG9uIHplcm9Pck1vcmUKCSogcmVzdWx0L3JlbGF4bmcvdHV0b3IzXzdfZXJyOiBjaGFuZ2Ugc2xpZ2h0bHkgZXJyb3IgcmVwb3J0aW5nLgoKTW9uIEF1ZyAyNSAxMzoyNDo1NyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW06IG1ha2Ugc3VyZSB0aGUgbmV3IGhlYWRlciB3aWxsCgkgIGJlIGluY2x1ZGVkIHdoZW4gZ2VuZXJhdGluZyBhIG5ldyBkaXN0cmlidXRpb24uCgpNb24gQXVnIDI1IDEyOjM3OjA1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGZpeGVkIGEgY291cGxlIG9mIHN0dXBpZCBidWdzIGluIHRoZSBzdGF0ZSBhbGxvY2F0aW9uCgkgIHJvdXRpbmVzIHdoaWNoIGxlZCB0byBidWcgIzEyMDA0MCBhbmQgdGhlIG9uZXMgcmVwb3J0ZWQgYnkKCSAgTWFydGlqbiBGYWFzc2VuCgpNb24gQXVnIDI1IDEyOjM3OjIzIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oCgkgIGluY2x1ZGUvbGlieG1sL1NBWC5oIGluY2x1ZGUvbGlieG1sL1NBWDIuaDogcmVhbGlnbmVkIHRoZQoJICBwYXJhbWV0ZXJzIGFmdGVyIHRhaW50LgoKTW9uIEF1ZyAyNSAxMToxNjowMSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbjogbW92ZWQgZXhwb3J0IGRlZnMgdG8gYSBzZXBhcmF0ZQoJICBmaWxlIGZvciBjb25zaXN0ZW5jeS4KCSogaW5jbHVkZS9saWJ4bWwveG1sZXhwb3J0cy5oOiBuZXcgZmlsZSwgY29udGFpbnMgZXhwb3J0IGRlZnMuCgpNb24gQXVnIDI1IDExOjAxOjQ5IENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvKi5oIGdlblVuaWNvZGUucHk6IGV4cG9ydGFiaWxpdHkgdGFpbnQKCSAgb2YgdGhlIGhlYWRlcnMuCgpUaHUgQXVnIDIxIDEyOjM3OjQ2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogbWFrZSB0aGUgZGVwcmVjYXRlZCBpbnRlcmZhY2VzIGxvZyBhbiBlcnJvciBtZXNzYWdlCgkgIHRvIGJlIHN1cmUgaXQgd29uJ3QgZ2V0IHVzZWQuCgpUaHUgQXVnIDIxIDAwOjUwOjMyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBTQVgyLmMgaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0gaW5jbHVkZS9saWJ4bWwvU0FYMi5oOgoJICBBZGRpbmcgbmV3IHZlcnNpb24gb2YgdGhlIFNBWCBpbnRlcmZhY2UsIGl0J3Mgbm90IHRoZXJlIHlldCwKCSAgY3VycmVudGx5IGp1c3QgcHJlcGFyaW5nIHRoZSB3b3JrCgkqIGdsb2JhbHMuYyBwYXJzZXIuYyBTQVguYyBpbmNsdWRlL2xpYnhtbC9TQVguaCAKCSAgaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBkb2luZyBzb21lCgkgIHJlZmFjdG9yaW5nIG9mIHRoZSBTQVh2MSBpbnRlcmZhY2VzLCBvYnNvbGV0aW5nIGEgYnVuY2ggb2YgdGhlbQoJICB3aGlsZSBrZWVwaW5nIGZ1bmN0aW9uYWxpdGllcywgcHJlcGFyaW5nIFNBWDIgaW50ZWdyYXRpb24uCgkqIGRpY3QuYzogc21hbGwgY2xlYW51cC4KCldlZCBBdWcgMjAgMDA6MjA6MDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZXMgYSBzbWFsbCBidWcgaW50cm9kdWNlZCBpbiBsYXN0IGNvbW1pdCBhbmQgZGV0ZWN0ZWQKCSAgYnkgdmFsZ3JpbmQuCgpUdWUgQXVnIDE5IDE2OjU0OjE4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmMgaGFzaC5jOiBvcHRpbWl6YXRpb24gd2hlbiBmcmVlaW5nIGhhc2ggdGFibGVzLgoJKiBwYXJzZXIuYyB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogc29tZSB0dW5pbmcgb2YgYnVmZmVyCgkgIGFsbG9jYXRpb25zCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBrZWVwIGEKCSAgc2luZ2xlIGFsbG9jYXRlZCBibG9jayBmb3IgYWxsIHRoZSBhdHRyaWJ1dGVzIGNhbGxiYWNrcywKCSAgYXZvaWQgdXNlbGVzcyBtYWxsb2MoKS9mcmVlKCkKCSogdHJlZS5jOiBkbyBub3QgcmVhbGxvYygpIHdoZW4gZ3Jvd2luZyBhIGJ1ZmZlciBpZiB0aGUgYnVmZmVyCgkgIGFpbid0IGZ1bGwsIG1hbGxvYy9tZW1jcHkvZnJlZSBhdm9pZCBjb3B5aW5nIG1lbW9yeS4KCk1vbiBBdWcgMTggMTg6Mzc6MDEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYyBkb2MveG1sbGludC54bWwgZG9jL3htbGxpbnQuMTogYWRkZWQgb3B0aW9uCgkgIC0tZHRkdmFsaWRmcGkgZm9yIFRvYmlhcyBSZWlmCgpNb24gQXVnIDE4IDE0OjAzOjAzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkaWN0LmMgaW5jbHVkZS9saWJ4bWwvZGljdC5oIE1ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOgoJICBuZXcgZGljdGlvbmFyeSBtb2R1bGUgdG8ga2VlcCBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgbmFtZXMgdXNlZAoJICBieSB0aGUgcGFyc2VyCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdmFsaWQuYzoKCSAgc3dpdGNoZWQgYWxsIHBhcnNlcnMgdG8gdXNlIHRoZSBkaWN0aW9uYXJ5IGludGVybmFsbHkKCSogaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6CgkgIFNvbWUgb2YgdGhlIGludGVyZmFjZXMgY2hhbmdlZCBhcyBhIHJlc3VsdCB0byByZWNlaXZlIG9yIHJldHVybgoJICAiY29uc3QgeG1sQ2hhciAqIiBpbnN0ZWFkIG9mICJ4bWxDaGFyICoiLCB0aGlzIGlzIGVpdGhlcgoJICBpbnNpZ25pZmljYW50IGZyb20gYW4gdXNlciBwb2ludCBvZiB2aWV3IG9yIHdoZW4gdGhlIHJldHVybmluZwoJICB2YWx1ZSBjaGFuZ2VkLCB0aG9zZSBmdW5jdGlvbiBhcmUgcmVhbGx5IHBhcnNlciBpbnRlcm5hbCBtZXRob2RzCgkgIHRoYXQgbm8gdXNlciBjb2RlIHNob3VsZCByZWFsbHkgY2hhbmdlCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL2h0bWwvKjogdGhlIEFQSSBpbnRlcmZhY2UgY2hhbmdlZCBhbmQKCSAgdGhlIGRvY3Mgd2VyZSByZWdlbmVyYXRlZAoKU3VuIEF1ZyAxNyAyMzowNTozOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggdG8geG1sQ2xlYW51cFBhcnNlciBmcm9tIERhdmUgQmVja2V0dAoKU2F0IEF1ZyAxNiAyMjo1Mzo0MiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGRvYy9wYXJzZWRlY2wucHksIGRvYy9saWJ4bWwyLXJlZnMueG1sLCBkb2MvQVBJKi5odG1sOgoJICBmaXhlZCBwYXJ0ICgyKSBvZiBidWcgMTE5NTM1ICh3cm9uZyBhbHBoYSBjYXNlIG9uIGZpbGVuYW1lcykKClNhdCBBdWcgMTYgMjA6MzU6MjggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBkb2MvQVBJKi5odG1sLCBkb2MvaHRtbC8qOiByZWdlbmVyYXRlZCBBUEkgZG9jdW1lbnRhdGlvbgoJICBmb3IgeG1sc29mdC5vcmcgKHBhcnQgb2YgQnVnIDExOTUzNSkKCkZyaSBBdWcgMTUgMTQ6NTg6MzcgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlbmNvZGluZy5jLCB0aHJlYWRzLmMsIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaCwKCSAgZG9jL2xpYnhtbDItYXBpLnhtbDogTWlub3IgY2hhbmdlcyB0byBjb21tZW50cywgZXRjLiBmb3IKCSAgaW1wcm92aW5nIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbgoJKiBkb2MvTWFrZWZpbGUuYW06IGZ1cnRoZXIgYWRqdXN0bWVudCB0byBhdXRvLWdlbmVyYXRpb24gb2YKCSAgd2luMzIvbGlieG1sMi5kZWYuc3JjCgpGcmkgQXVnIDE1IDAyOjI0OjIwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBOZXdzIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGxpYnhtbDItMi41LjEwIHJlbGVhc2UKCSogZG9jLyogOiB1cGRhdGVkIHRoZSBkb2MgYW5kIHJlYnVpbHQKCkZyaSBBdWcgMTUgMDE6NTU6NTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgdGhlIHhtbFNBWFBhcnNlRFREIGJ1ZyAjMTE5NTM2IHJhaXNlZCBieQoJICBNYWxjb2xtIFRyZWRpbm5pY2sgd2l0aCB0aGUgcGF0Y2ggaGUgc3VnZ2VzdGVkLgoKRnJpIEF1ZyAxNSAwMTozNzoxMCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhbGxvY2F0aW9uIGVycm9yICMxMTk3ODQgcmFpc2VkIGJ5IE9saXZlciBTdG9lbmViZXJnCgpGcmkgQXVnIDE1IDAwOjQxOjU4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogZml4aW5nIGFuIHVzZSBvZiBzdHJjcHkoKSB3aGVyZSBib3RoIHN0cmluZ3Mgb3ZlcmxhcAoJICBwb2ludGVkIG91dCBieSB2YWxncmluZC4KClRodSBBdWcgMTQgMTc6MTA6MzkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBnbG9iYWxzLmMgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGdldCByaWQgb2YKCSAgc29tZSBjb21waWxhdGlvbiB3YXJuaW5ncy4KCSogeGluY2x1ZGUuYzogZml4IHRoZSBwZXJmb3JtYW5jZSBwcm9ibGVtIHJlcG9ydGVkIGJ5IEtldmluIFJ1c2NvZQoJICBwbHVzIHNvbWUgY2xlYW51cCBhbmQgYmV0dGVyIGVycm9yIHJlcG9ydGluZy4KClRodSBBdWcgMTQgMTQ6MTM6NDMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGFwcGxpZWQgVVRGLTE2IGVuY29kaW5nIGhhbmRsaW5nIHBhdGNoIHByb3ZpZGVkIGJ5CgkgIE1hcmsgSXR6Y292aXR6CgkqIGVuY29kaW5nLmMgcGFyc2VyLmM6IG1vcmUgY2xlYW51cCBhbmQgZml4ZXMgZm9yIFVURi0xNiB3aGVuIAoJICBub3QgaGF2aW5nIGljb252IHN1cHBvcnQuCgpUaHUgQXVnIDE0IDAzOjE5OjA4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gZXhhbXBsZS9NYWtlZmlsZS5hbSBsaWJ4bWwuaCBuYW5vZnRwLmMKCSAgbmFub2h0dHAuYyB4bWxsaW50LmM6IEFwcGxpZWQgcGF0Y2ggZnJvbSBNaWtoYWlsIEdydXNoaW5za2l5IGZvcgoJICBtaW5ndyBjb21waWxlciBvbiBXaW5kb3dzLgoKVGh1IEF1ZyAxNCAwMjoyODozNiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVkIHRoZSBzZXJpb3VzIENQVSB1c2FnZSBwcm9ibGVtIHJlcG9ydGVkIGJ5CgkgIEdyYW50IEdvb2RhbGUKCSogSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gT2xpdmVyIFN0b2VuZWJlcmcgYWJvdXQgYSBmcmVlCgkgIG1pc3NpbmcgaW4gaHRtbFNBWFBhcnNlRG9jCgpUdWUgQXVnIDEyIDIyOjQ4OjEwIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogZG9jL01ha2VmaWxlLmFtOiBSZW1vdmVkIGRlcGVuZGVuY3kgZnJvbSBsaWJ4bWwyLmRlZi5zcmMKClR1ZSBBdWcgMTIgMTg6NTU6MDggSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBhdXRvZ2VuLnNoOiB0b29rIGF3YXkgdGhlIHJlcXVpcmVtZW50IGZvciBhdXRvbWFrZS0xLjQsCgkgIGNoYW5nZWQgdGhlIG1lc3NhZ2VzIGZvciBnZXR0aW5nIGF1dG8qIHRvb2xzIHRvIGN1cnJlbnQKCSAgZ251IHBhZ2VzLgoJKiBjb25maWd1cmUuaW46IGFkZGVkIGNoZWNrIGZvciBMaW51eCBEZWMgYWxwaGEgcmVxdWlyaW5nCgkgIC1pZWVlIGZsYWcsIGZpeGVkIHRlc3QgZm9yIGlwdjYKCSogdHJpb25hbi5jOiBmaXhlZCBwcm9ibGVtIGZvciBjb21waWxpbmcgb24gTGludXggRGVjIGFscGhhCgkgIHVzaW5nIG5hdGl2ZSBjb21waWxlcgoJKiBkb2MvTWFrZWZpbGUuYW06IGltcGxlbWVudGVkIHJlZ2VuZXJhdGlvbiBvZiB3aW4zMi9saWJ4bWwyLmRlZi5zcmMKCSAgd2hlbmV2ZXIgbGlieG1sMi1hcGkueG1sIGlzIGNoYW5nZWQuCgpNb24gQXVnIDExIDE3OjAyOjIzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogY2xlYW5pbmcgdXAgYSBwcm9ibGVtIHdoZW4gcGFyc2luZyBVVEYtMTYgYW5kIGxpYmljb252CgkgIGlzIG5vdCB1c2VkLgoKU3VuIEF1ZyAxMCAwODoxMzoyMiBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogcmVuZXJhdGVkIHdpdGggZml4ZWQgbGlieG1sMi1hcGkueG1sCgpTdW4gQXVnIDEwIDAwOjIyOjU1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBOZXdzIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGxpYnhtbDItMi41LjkgcmVsZWFzZQoJKiBkb2MvKiA6IHVwZGF0ZWQgdGhlIGRvYyBhbmQgcmVidWlsdAoKU2F0IEF1ZyAgOSAyMDowMDoxMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggZG9jL2xpYnhtbDItYXBpLnhtbDogY2hhbmdpbmcgYW4gZW51bQoJICBkZWZpbml0aW9uIHRvIGdldCBhIGNvcnJlY3QgQVBJIFhNTCBkZXNjcmlwdGlvbi4gVGhpcyB3YXMgYXBwYXJlbnRseQoJICBicmVha2luZyBXaW5kb3dzIGJ1aWxkLgoKU2F0IEF1ZyAgOSAxMzo0MToyMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBhIG5hc3R5IGJ1ZyAjMTE5Mzg3LCBiYWQgaGV1cmlzdGljIGZyb20KCSAgdGhlIHByb2dyZXNzaXZlIEhUTUwgcGFyc2VyIGZyb250LWVuZCBvbiBsYXJnZSBjaGFyYWN0ZXIgZGF0YQoJICBpc2xhbmQgbGVhZGluZyB0byBhbiBlcnJvbmVvdXMgZW5kIG9mIGRhdGEgZGV0ZWN0aW9uIGJ5IHRoZQoJICBwYXJzZXIuIFNvbWUgY2xlYW51cCB0b28gdG8gZ2V0IGNsb3NlciBmcm9tIHRoZSBYTUwgcHJvZ3Jlc3NpdmUKCSAgcGFyc2VyLgoKU2F0IEF1ZyAgOSAwMDo0Mjo0NyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogQWRkZWQgaW4gc3VwcG9ydCBmb3IgdGhlIElTTzg4NTlYCgkgIG1vZHVsZSAocGF0Y2ggcHJvdmlkZWQgYnkgSmVzc2UgUGVsdG9uKQoKRnJpIEF1ZyAgOCAxNTo1NjozMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB0cmVlLmMgdGhyZWFkcy5jOiBodW0gdHJ5IHRvIGF2b2lkIHNvbWUgdHJvdWJsZXMKCSAgd2hlbiB0aGUgbGlicmFyeSBpcyBub3QgaW5pdGlhbGl6ZWQgYW5kIG9uZSB0cnkgdG8gc2F2ZSwgdGhlIAoJICBsb2NrcyBpbiB0aHJlYWRlZCBlbnYgbWlnaHQgbm90IGJlZW4gaW5pdGlhbGl6ZWQsIHBsYXlpbmcgc2FmZQoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYXBwbHkgcGF0Y2ggZm9yIGhleEJpbmFyeSBmcm9tIENoYXJsZXMgQm96ZW1hbgoJKiB0ZXN0L3NjaGVtYXMvaGV4YmluYXJ5XyogcmVzdWx0L3NjaGVtYXMvaGV4YmluYXJ5Xyo6IGFsc28gYWRkZWQKCSAgaGlzIHRlc3RzIHRvIHRoZSByZWdyZXNzaW9uIHN1aXRlLgoKRnJpIEF1ZyAgOCAxODo0NzozOCBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHdpbjMyL2RlZmdlbi54c2wsIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogQnVnIDExOTM0MwoJICAod2l0aCBhcG9sb2dpZXMgdG8gSWdvcikgLSBFbmhhbmNlZCBoYW5kbGluZyBvZiBkb2NiIGFuZAoJICBuYW5vaHR0cC4KClRodSBBdWcgIDcgMjE6MTM6MjIgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlbmNvZGluZy5jOiBmdXJ0aGVyIHNtYWxsIGNoYW5nZXMgZm9yIHdhcm5pbmdzIHdoZW4KCSAgY29uZmlndXJlZCB3aXRoIC0td2l0aC1pY29udj1ubwoKV2VkIEF1ZyAgNiAxMjozMjoxMSBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIGVycm9yLmMgdHJpb25hbi5bY2hdIHRlc3RUaHJlYWRzLmMgcHl0aG9uL2dlbmVyYXRvci5weToKCSAgZnVydGhlciBzbWFsbCBjaGFuZ2VzIHRvIGVsbWluYXRlIG1vc3Qgb2YgdGhlIHJlbWFpbmluZwoJICB3YXJuaW5ncy4KClR1ZSBBdWcgIDUgMjM6NTE6MjEgSEtUIDIwMDMgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBlcnJvci5jIEhUTUxwYXJzZXIuYyB0ZXN0QzE0Ti5jIHRlc3RIVE1MLmMgdGVzdFVSSS5jCgkgIHhtbGNhdGFsb2cuYyB4bWxtZW1vcnkuYyB4bWxyZWFkZXIuYyB4bWxzY2hlbWFzdHlwZXMuYwoJICBweXRob24vbGlieG1sLmMgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IHNtYWxsIGNoYW5nZXMKCSAgdG8gc3ludGF4IHRvIGdldCByaWQgb2YgY29tcGlsZXIgd2FybmluZ3MuICBObyBjaGFuZ2VzCgkgIHRvIGxvZ2ljLgoKTW9uIEF1ZyAgNCAyMjo0MDo1NCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvaHRtbC8qOiByZWJ1aWx0IHRoZSBBUEkgYW5kIGRvY3MuCgpNb24gQXVnICA0IDIxOjQwOjM0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIGEgc21hbGwgcHJvYmxlbSBpbiB0aGUgcGF0Y2ggZm9yICMxMTg3NjMKCSogcmVzdWx0L0hUTUwvZG9jMy5odG0qOiB0aGlzIHJldmVydHMgYmFjayB0byB0aGUgcHJldmlvdXMgcmVzdWx0CgpTdW4gQXVnICAzIDIxOjQxOjQ5IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9GQVEuaHRtbCBkb2MveG1sLmh0bWw6IGFwcGxpZWQgZG9jIHBhdGNoIHRvIHhtbC5odG1sCgkgIGFuZCByZWJ1aWx0LCBhcHBhcmVudGx5IHNvbWUgQysrIHdyYXBwZXJzIGFyZSBub3QgYXZhaWxhYmxlLAoJICBjLmYuIGJ1ZyAjMTE4OTQzCgpTdW4gQXVnICAzIDIxOjMwOjMxIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4aW5nIEhUTUwgYXR0cmlidXRlIHNlcmlhbGl6YXRpb24gYnVnICMxMTg3NjMKCSAgYXBwbHlpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBwYXRjaCBmcm9tIEJhY2VrCgkqIHJlc3VsdC9IVE1ML2RvYzMuaHRtKjogdGhpcyBtb2RpZmllcyB0aGUgb3V0cHV0IGZyb20gb25lIHRlc3QKClN1biBBdWcgIDMgMjE6MDI6MzAgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWRkZWQgYSBuZXcgQVBJIHRvIHNwbGl0IGEKCSAgUU5hbWUgd2l0aG91dCBnZW5lcmF0aW5nIGFueSBtZW1vcnkgYWxsb2NhdGlvbgoJKiB2YWxpZC5jOiBmaXhlZCBhbm90aGVyIHByb2JsZW0gd2l0aCBuYW1lc3BhY2VzIG9uIGVsZW1lbnQKCSAgaW4gbWl4ZWQgY29udGVudCBjYXNlCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5OiB1cGRhdGVkIHRoZSB0ZXN0Y2FzZSB3aXRoIAoJICBCam9ybiBSZWVzZSBmaXggdG8gcmVhZGVyIGZvciB1bnNpZ25pZmljYW50IHdoaXRlIHNwYWNlCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogY2xlYW51cC4KClN1biBBdWcgIDMgMjA6NTU6NDAgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jOiB0cnlpbmcgdG8gZml4ICMxMTg3NTQgb2YgcG9zc2libGUgcmVjdXJzaW9uIGluIHRoZQoJICBjYXRhbG9ncy4gTm90IGZhbnRhc3RpY2FsbHkgaGFwcHkgYWJvdXQgdGhlIGN1cnJlbnQgZml4IHNpbmNlCgkgIGl0J3MgbGlrZWx5IHRvIGJyZWFrIHVuZGVyIHZlcnkgdGhyZWFkIGludGVuc2l2ZSBjb25jdXJyZW50CgkgIGFjY2VzcyB0byB0aGUgY2F0YWxvZy4gQmV0dGVyIHNvbHV0aW9uIG1pZ2h0IHRvIGtlZXAgdGhlIGRlcHRoCgkgIGFuIGV4dHJhIGFyZ3VtZW50IHRvIHRoZSByZXNvbHV0aW9uIGZ1bmN0aW9ucy4KClN1biBBdWcgIDMgMTg6NTY6NTQgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgYnVnICMxMTg3MTIgYWJvdXQgbWl4ZWQgY29udGVudCwgYW5kIG5hbWVzcGFjZWQKCSAgZWxlbWVudCBuYW1lcy4KCSogdGVzdC92YWxpZC9taXhlZF9ucy54bWwgcmVzdWx0L3ZhbGlkL21peGVkX25zKjogYWRkZWQgYSBjaGVjawoJICBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0cwoKRnJpIEF1ZyAxIDIzOjU1OjIzIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCUNvbmludWluZyB3b3JrIG9uIGJ1ZyAxMTg1NTkKCSogRE9DQnBhcnNlci5jOiByZW1vdmVkIDIgdW5zZWQgdmFycwoJKiB4bWxyZWdleHAuYzogY2hhbmdlZCBzb21lIG51bWVyaWMgY29uc3QgdG8gdGhlaXIgZW51bSBzeW1ib2xzCgkqIHhtbHJlYWRlci5jOiBjaGFuZ2VkIG9uZSB2YXIgZGVmaW5lIGZyb20gaW50IHRvIGVudW0KCSAgKGEgbGl0dGxlIG1vcmUgdG8gYmUgZG9uZSwgYXdhaXRpbmcgY28tb3JkaW5hdGlvbikKCSogcmVsYXhuZy5jOiBkZWxldGVkIG9uZSB1bnVzZWQgdmFyCgkqIHhtbGxpbnQuYzogZGVsZXRlZCBzb21lIHVudXNlZCB2YXJzLCBjaGFuZ2VkIG9uZSBhcmcKCSAgdmFsIGZyb20gaW50IHRvIGVudW0KCSogdGVzdEhUTUwuYywgdGVzdERvY2Jvb2suYzogY2hhbmdlZCBzb21lIGFyZyB2YWxzIHRvIGVudW0gY29uc3QKCSogeG1sSU8uYzogZml4ZWQgdHlwbyBmcm9tIGxhc3QgbmlnaHQgKHNtYWxsIHdhcm5pbmcgbXNnKQoKVGh1IEp1bCAzMSAyMjo0NDozMyBIS1QgMjAwMyBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCglXb3JraW5nIG9uIGJ1ZyAxMTg1NTkKCSogZXJyb3IuYzogZGVsZXRlZCB1bnVzZWQgdmFyaWFibGUKCSogcGFyc2VySW50ZXJuYWxzLmM6IGRlbGV0ZWQgdW5uZWVkZWQgJ2NvbnN0JyBxdWFsaWZpZXIKCSogcGFyc2VyLmM6IGNoYW5nZWQgdmFyaWFibGUgdHlwZSBmb3IgZW51bSB0ZW1wIHN0b3JhZ2UKCSogeG1sSU8uYzogY2hhbmdlZCBkZWJ1Z2dpbmcgdmFyIHRvIGJlIGluc2lkZSAjaWZkZWYKCSogdmFsaWQuYzogcmVtb3ZlZCB1bnVzZWQgdmFyaWFibGUKCSogSFRNTHBhcnNlci5jOiByZW1vdmVkIHNvbWUgdW5uZWVkZWQgJ2NvbnN0JyBxdWFsaWZpZXJzCgkqIHhwYXRoLmM6IGFkZGVkIHNvbWUgdHlwZSBjYXN0cywgcmVtb3ZlZCBzb21lIHVudXNlZCB2YXJzCgkqIHhpbmNsdWRlLmM6IGFkZGVkIG9uZSB0eXBlIGNhc3QKCSogbmFub2h0dHAuYzogcmVwb3NpdGlvbmVkIHNvbWUgI2lmZGVmIHRvIGF2b2lkIHVudXNlZCB2YXIKCSogbmFub2Z0cC5jOiByZW1vdmVkIHVudXNlZCB2YXIKCldlZCBKdWwgMzAgMTQ6NTc6NTUgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBXaWxsaWFtIEJyYWNrIGFib3V0CgkgIHRoZSBwcm9ibGVtIG9mIHBhcnNpbmcgdmVyeSBsYXJnZSBIVE1MIGluc3RhbmNlIHdpdGggY29tbWVudHMKCSAgYXMgcmFpc2VkIGJ5IE5pY2sgS2V3CgpXZWQgSnVsIDMwIDEyOjI5OjM4IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBhcHBseWluZyBjbGVhbnVwCgkgIHBhdGNoIGZyb20gQmpvcm4gUmVlc2UgZm9yIHhtbFRleHRSZWFkZXJOb2RlVHlwZSgpIGFuZCAKCSAgc2lnbmlmaWNhbnQgd2hpdGVzcGFjZS4gVGhlcmUgaXMgYW4gZW51bSBmb3Igbm9kZSB0eXBlCgkgIHZhbHVlcyBub3cuCgpXZWQgSnVsIDMwIDExOjA4OjIxIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGFwcGx5aW5nIHBhdGNoIGZyb20gUGV0ZXIgSmFjb2JpIHRvIGFkZGVkIAoJICBJU08tODg1OS14IGVuY29kaW5nIHN1cHBvcnQgd2hlbiBpY29udiBpcyBub3QgYXZhaWxhYmxlCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW46IGFkZGVkIHRoZSBnbHVlIG5lZWRlZAoJICBhdCB0aGUgY29uZmlndXJlIGxldmVsIGFuZCBtYWRlIGl0IHRoZSBkZWZhdWx0IGZvciBXaW5kb3dzCgpUdWUgSnVsIDI5IDE2OjQzOjQ4IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OgoJICBwYXRjaCBmcm9tIEpvYWNoaW0gQmF1Y2ggKyBjbGVhbnVwIGZvciBSZWxheCBORyBlcnJvciBjYWxsYmFja3MKCSAgaW4gcHl0aG9uCgpUdWUgSnVsIDI5IDEyOjQ2OjA4IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYzogYXBwbGllZCBQZXRlciBKYWNvYmkgZW5jb2RpbmcKCSAgY2xlYW51cCBwYXRjaCwgYW5kIGFsc28gYXZvaWRlZCBhIHBvc3NpYmxlIG1lbW9yeSBsZWFrCgpUdWUgSnVsIDI5IDA5OjI4OjA5IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGZpeCB0aGUgcHJldmlvdXMgY29tbWl0CgpUdWUgSnVsIDI5IDEyOjI4OjE3IEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtIHdpdGggY29tbWVudHMgcmVwb3J0ZWQgYnkgTmljayBLZXcKCSogZW5jb2RpbmcuYzogYWRkZWQgcm91dGluZXMgeG1sVVRGOFNpemUgYW5kIHhtbFVURjhDaGFyY21wIGZvcgoJICBzb21lIGZ1dHVyZSBjbGVhbnVwIG9mIFVURjggaGFuZGxpbmcKCk1vbiBKdWwgMjggMTY6Mzk6MTQgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogYXBwbGllZCBhIGNoYW5nZSBzdWdnZXN0ZWQgYnkgU2VhbiBHcmlmZmluIGluIGJ1ZwoJICAjMTE4NDk0IGFib3V0IGEgbWVtb3J5IGxlYWsgaW4gRVhTTFQKClN1biBKdWwgMjcgMTQ6MzA6NTYgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBhIFJlbGF4LU5HIGNvbXBpbGF0aW9uL3N0cmVhbWluZyBidWcgaW50cm9kdWNlZAoJICB3aGVuIGZpeGluZyB0aGUgcHJldmlvdXMgUmVsYXgtTkcgYnVncwoJKiByZXN1bHQvcmVsYXhuZy8qOiBUaGlzIHNsaWdodGx5IGNoYW5nZXMgdGhlIG91dHB1dCBtZXNzYWdlcyBvZgoJICBzb21lIHJlZ3Jlc3Npb24gdGVzdHMuCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgc3VwcG9ydCBvZiAtd2l0aC1mZXhjZXB0aW9ucyBmb3IgbmVzdGVkIEMrKwoJICBzdXBwb3J0LgoKVGh1IEp1bCAyNCAxNTo0NjowMiBNRFQgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL2FwYS5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGIuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBjLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwZC5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGUuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBmLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FwZy5odG1sCgkqIGRvYy90dXRvcmlhbC9hcGguaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwMi5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczAzLmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDQuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwNS5odG1sCgkqIGRvYy90dXRvcmlhbC9hcjAxczA2Lmh0bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDcuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXIwMXMwOC5odG1sCgkqIGRvYy90dXRvcmlhbC9pbmRleC5odG1sCgkqIGRvYy90dXRvcmlhbC9peDAxLmh0bWwKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnBkZgoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sCgl1cGRhdGUgdHV0b3JpYWwgd2l0aCBYUGF0aCBleGFtcGxlCgpUaHUgSnVsIDI0IDE3OjA3OjA2IElTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHBhcnNlci5jOiBmaXhpbmcgYSBidWcgYWJvdXQgYSBzcGVjaWFsIGNhc2Ugb2YgbmFtZXNwYWNlCgkgIGhhbmRsaW5nLCB0aGlzIGNsb3NlcyBidWcgIzExNjg0MQoKV2VkIEp1bCAyMyAyMDo1MjozNiBJU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgcmVzdWx0L3JlbGF4bmcvKjogY2hlY2tlZCBhbmQgZml4ZWQgdGhlIGNvbXBpbGF0aW9uCgkgIG9mIFJORyBzY2hlbWFzLCBmaXhlcyBhIGNvdXBsZSBvZiBidWdzICMxMTcwOTcgYW5kICMxMTcwMDEgLgoJICBUaGlzIHNsaWdodGx5IGNoYW5nZXMgdGhlIG91dHB1dCBtZXNzYWdlcyBvZiBzb21lIHJlZ3Jlc3Npb24gdGVzdHMuCgpXZWQgSnVsIDIzIDE1OjE1OjA4IElTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhlZCBhbiBvdXQgb2YgYm91bmQgZXJyb3IgIzExODA1MiAsIHRoZSBnb29kCgkgIHBhcnQgaWYgdGhhdCBiYXNlNjQgY29kZSB3YXMgbm90IGluIHVzZSB5ZXQgLi4uCgpUdWUgSnVsIDIyIDE5OjQyOjE1IE1EVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC5odG1sCglpbmNsdWRlIGh0bWwgdmVyc2lvbiBvZiB0aGUgeG1sbGludCBtYW4gcGFnZSwgc28gYW4KCXVwLXRvLWRhdGUgdmVyc2lvbiBpcyB2aXNpYmxlIG9uIHRoZSBXZWIKCk1vbiBKdWwgMjEgMjE6NTM6NDMgSVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYyBpbmNsdWRlL2xpYnhtbC94aW5jbHVkZS5oOiBhZGRlZCBhIG5ldyBBUEkKCSAgeG1sWEluY2x1ZGVQcm9jZXNzVHJlZSgpIHRvIHByb2Nlc3MgWEluY2x1ZGUgb25seSBvbiBhIHN1YnRyZWUKCSAgdGhpcyBzaG91bGQgZml4IGJ1ZyAjMTE1Mzg1CgpGcmkgSnVsIDE4IDE3OjExOjQyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oOiBhZGRpbmcgR2V0IGludGVyZmFjZSBmb3IKCSAgdGhlIGVycm9yIGNhbGxiYWNrIGFuZCBwYXJhbWV0ZXJzIG9mIHBhcnNpbmcgYW5kIHZhbGlkYXRpb24KCSAgY29udGV4dHMKCSogeG1scmVhZGVyLmM6IHBhdGNoIHRvIGZpeCBidWcgIzExNzcwMiBhYm91dCBpbmNvbXBsZXRlIFJlYWQoKQoJICBvbiB0ZXh0IG5vZGVzLgoKV2VkIEp1bCAxNiAyMzoxNTo1MyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IHBhdGNoIGZyb20gRG9kamkgU2VrZXRlbGkgYWJvdXQgVVRGMTYgQk9NCgkgIHdoZW4gdXNpbmcgdGhlIHB1c2ggWE1MIHBhcnNlci4KCSogcmVzdWx0L3V0ZjE2Ym9tLnhtbCByZXN1bHQvbm9lbnQvdXRmMTZib20ueG1sIHRlc3QvdXRmMTZib20ueG1sOgoJICBhZGRlZCB0aGUgdGVzdCB0byB0aGUgcmVncmVzc2lvbiBzdWl0ZS4KClR1ZSBKdWwgMTUgMjI6MDM6MTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogYWRkIHhtbFRockRlZk11dGV4ID0gTlVMTCBpbiB4bWxDbGVhbnVwR2xvYmFscygpIAoJICBhcyBzdWdnZXN0ZWQgYnkgUm9iIFJpY2hhcmRzCgpUdWUgSnVsIDE1IDE1OjMwOjU1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGVudGl0aWVzLmMgcGFyc2VyLmMgcmVsYXhuZy5jIAoJICB4bWxzY2hlbWFzLmMgeHBhdGguYzogcmVtb3ZlZCBzb21lIHdhcm5pbmdzIGJ5IGNhc3RpbmcgeG1sQ2hhcgoJICB0byB1bnNpZ25lZCBpbnQgYW5kIGEgY291cGxlIG9mIG90aGVycy4KCkZyaSBKdWwgMTEgMTY6NDQ6MjIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlcyBhIHNlZ2ZhdWx0IG9uIGVtcHR5IGhleEJpbmFyeSBzdHJpbmdzCgpUaHUgSnVsIDEwIDE2OjAyOjQ3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogY2xlYW51cCBwYXRjaGVzIGZyb20gUGV0ZXIgQnJlaXRlbmxvaG5lcgoKVHVlIEp1bCAgOCAxNjowMjoxOSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHRocmVhZHMuYzogZml4ZXMgc29tZSBwcm9ibGVtIHdoZW4gZnJlZWluZyB1bml0aXRpYWxpemVkCgkgIG11dGV4ZXMKClR1ZSBKdWwgIDggMTQ6MTU6MDcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiB0aGUgbW9kdWxlcyBzaG91bGQgbm90IGltcG9ydCA8Y29uZmlnLmg+CgkgIGRpcmVjdGx5LCBzb21lIGNsZWFudXBzCgkqIHhtbHNjaGVtYXMuYzogUGV0ZXIgU29iaXNjaCBmb3VuZCBhIG5hc3R5IGJ1ZyBpbiB0aGUgU2NoZW1hcwoJICB2YWxpZGF0aW9uIGNvZGUuCgpNb24gSnVsICA3IDE4OjAwOjUxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IEplc3NlIFBlbHRvbiBwb2ludGVkIG91dCBhIHByb2JsZW0gaW4gdGhlCgkgIGphdmFzY3JpcHQgY29kZS4KCk1vbiBKdWwgIDcgMTY6Mzk6MzEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZG9jLyo6IHJlZ2VuZXJhdGVkCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jOiBtaWdodCBmaXggaW5jbHVkZXMgcHJvYmxlbXMgd2l0aCB0aGUKCSAgSXB2NiBzdXBwb3J0IG9uIHNvbGFyaXMKCSogdHJlZS5jOiBwYXRjaCBmcm9tIE1hcmt1cyBLZWltIGFib3V0IHhtbEhhc05zUHJvcCgpIG9uIGF0dHJpYnV0ZXMKCSAgZGVmaW5lZCBhcyAjSU1QTElFRAoKU3VuIEp1bCAgNiAyMzowOToxMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGRvYy8qOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjUuOAoJKiBuYW5vaHR0cC5jOiBjaGFuZ2VkIHNvbWUgcHJlcHJvY2Vzc29yIGJsb2NrCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQ2hhcmxlcyBCb3plbWFuIGFkZGluZwoJICBoZXhCaW5hcnkgc2NoZW1hIGRhdGF0eXBlIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdG90YWxEaWdpdHMgYW5kCgkgIGZyYWN0aW9uRGlnaXRzIGZhY2V0cy4KClN1biBKdWwgIDYgMTk6NTY6MTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgeHBhdGguYzogZml4ZWQgMiBidWdzIHBvaW50ZWQgaW4gIzExNjQ0OAoKU3VuIEp1bCAgNiAxOTozNDoxNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogZml4ZWQgYnVnICMxMTYwOTUgcmVtb3ZpbmcgdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbgoJICByZWFwcGx5aW5nIFhJbmNsdWRlIHRvIGEgZG9jdW1lbnQuCgpTYXQgSnVsICA1IDIyOjQwOjIzIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBhcHBsaWVkIHNtYWxsIGNoYW5nZXMgdG8gcG9ydGFiaWxpdHkgbGF5ZXIgZm9yIAoJICBjb21waWxhdGlvbiBvbiBESkdQUCBNcy1ET1MgY29tcGlsZXIuCgpTYXQgSnVsICA1IDIyOjMwOjI1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IHVzZSB0aGUgY2hhcmFjdGVyKCkgU0FYIGNhbGxiYWNrCgkgIGlmIHRoZSBjZGF0YUJsb2NrIGFpbid0IGRlZmluZWQuCgkqIHhwYXRoLmM6IGZpeCBidWcgIzExNTM0OSBhbGxvd2luZyBjb21waWxhdGlvbiB3aGVuIGNvbmZpZ3VyZWQKCSAgd2l0aCAtLXdpdGhvdXQteHBhdGggc2luY2UgdGhlIFNjaGVtYXMgY29kZSBuZWVkcyBOQU4gYW5kIGNvLgoKU2F0IEp1bCA1IDAwOjUxOjMwIEhLVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCUZpeGVkIHByb2JsZW0gd2l0aCBtdWx0aS10aHJlYWRpbmcsIHNob3duIGJ5IHRoZSB0ZXN0IHByb2dyYW0KCXRlc3RUaHJlYWRzLiAgQWZ0ZXIgZml4LCByYW4gbXV0aXBsZSB0ZXN0cyBvbiB2YXJpb3VzIHNwZWVkCgltYWNoaW5lcyAoc2luZ2xlIGFuZCBkdWFsIHByb2Nlc3NvciBYODYpLCB3aGljaCBhbGwgc2VlbSBva2F5LgoKCSogY2F0YWxvZy5jOiBhZGRlZCBtaXNzaW5nIHhtbFJNdXRleFVubG9jayBpbiB4bWxMb2FkQ2F0YWxvZwoKCSogdGhyZWFkcy5jOiBhZGRlZCBtaXNzaW5nIGluaXRpYWxpc2F0aW9uIGZvciBjb25kaXRpb24gdmFyaWFibGUKCSAgaW4geG1sTmV3Uk11dGV4LgoKU2F0IEp1biAyMSAxNjoxMDoyNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCUFwcGx5aW5nIElQdjYgcGF0Y2ggZnJvbSBBcmNoYW5hIFNoYWggPGFyY2hhbmEuc2hhaEB3aXByby5jb20+CgljbG9zaW5nIGJ1ZyAjMTE0ODM3CgoJKiBjb25maWd1cmUuaW46IEFkZGVkIGNoZWNrcyBmb3IgSVB2NiBzdXBwb3J0IGFuZCBnZXRhZGRyaW5mbygpLgoKCSogYWNjb25maWcuaDogRGVmaW5lZCBIQVZFX0dFVEFERFJJTkZPIGFuZCBTVVBQT1JUX0lQNi4KCgkqIGNvbmZpZy5oLmluOiBEZWZpbmVkIEhBVkVfR0VUQUREUklORk8gYW5kIFNVUFBPUlRfSVA2LgoKCSogbmFub2Z0cC5jOiBTdHJ1Y3R1cmUgeG1sTmFub0ZUUEN0eHQgY29udGFpbnMgZWl0aGVyIHNvY2thZGRyX3N0b3JhZ2UKCSAgZmllbGQgb3Igc29ja2FkZHJfaW4gZmllbGQsIGRlcGVuZGluZyB1cG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YgSVB2NgoJICBzdXBwb3J0LgoJICBoYXZlX2lwdjYoKTogQWRkZWQgdG8gY2hlY2sgZm9yIHJ1bi10aW1lIElQdjYgc3VwcG9ydC4KCSAgKHhtbE5hbm9GVFBTY2FuVVJMKSwgKHhtbE5hbm9GVFBVcGRhdGVVUkwpLCAoeG1sTmFub0ZUUFNjYW5Qcm94eSk6CgkgIE1vZGlmaWVkIHRvIHBhcnNlIGEgVVJJIHdpdGggSVB2NiBhZGRyZXNzIGdpdmVuIGluIFtdLgoJICAoeG1sTmFub0ZUUENvbm5lY3QpOiBDaGFuZ2VkIHRvIHVzZSBnZXRhZGRyaW5mbyBmb3IgYWRkcmVzcwoJICByZXNvbHV0aW9uLCBpZiBpdCBpcyBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSwgYXMgZ2V0aG9zdGJ5bmFtZQoJICBkb2VzIG5vdCByZXR1cm4gSVB2NiBhZGRyZXNzZXMgb24gc29tZSBwbGF0Zm9ybXMuCgkgICh4bWxOYW5vRlRQR2V0Q29ubmVjdGlvbik6IE1vZGlmaWVkIHR5cGUgb2YgZGF0YUFkZHIgdmFyaWFibGUgdG8KCSAgc29ja2FkZHJfc3RvcmFnZSBvciBzb2NrYWRkcl9pbiBkZXBlbmRpbmcgdXBvbiB0aGUgSVB2NiBzdXBwb3J0LgoJICBTZW5kaW5nIEVQU1YsIEVQUlQgb3IgUEFTViwgUE9SVCBkZXBlbmRpbmcgdXBvbiB0aGUgdHlwZSBvZiBhZGRyZXNzCgkgIHdlIGFyZSBkZWFsaW5nIHdpdGguCgoJKiBuYW5vaHR0cC5jOiAoaGF2ZV9pcHY2KTogQWRkZWQgdG8gY2hlY2sgZm9yIHJ1bi10aW1lIElQdjYgc3VwcG9ydC4KCSAgKHhtbE5hbm9IVFRQU2NhblVSTCksICh4bWxOYW5vSFRUUFNjYW5Qcm94eSk6IE1vZGlmaWVkIHRvIHBhcnNlCgkgIGEgVVJJIHdpdGggSVB2NiBhZGRyZXNzIGdpdmVuIGluIFtdLgoJICAoeG1sTmFub0hUVFBDb25uZWN0SG9zdCk6IE1vZGlmaWVkIHRvIHVzZSBnZXRhZGRyaW5mbyBpZiBpdCBpcwoJICBhdmFpbGFibGUgb24gdGhlIHN5c3RlbS4gQWxzbyBJUHY2IGFkZHJlc3NlcyB3aWxsIGJlIHJlc29sdmVkIGJ5CgkgIGdldGhvc3RieW5hbWUgb25seSBpZiBJUHY2IHJ1bi10aW1lIHN1cHBvcnQgaXMgYXZhaWxhYmxlLgoJICAoeG1sTmFub0hUVFBDb25uZWN0QXR0ZW1wdCk6IE1vZGlmaWVkIHRvIGRlYWwgd2l0aCBJUHY2IGFkZHJlc3MuCgpTYXQgSnVuIDE0IDE4OjQ2OjUxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvY29uZmlndXJlLmpzIGluY2x1ZGUvd2luMzJjb25maWcuaCAKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBBcHBsaWVkIHRoZSBwYXRjaCBmb3IgQkNCCgkgIGJ5IEVyaWMgWnVyY2hlci4KCkZyaSBKdW4gMTMgMTQ6Mjc6MTkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MvaHRtbC8qOiByZXZlcnRlZCBiYWNrIHBhdGNoIGZvciAjMTEzNTIxLAoJICBkdWUgdG8gIzExNTEwNCBhbmQgd2hpbGUgZml4aW5nICMxMTUxMDEgLiBIVE1MIFVSTHMgbXVzdCBub3QKCSAgYmUgdmVyc2lvbiBkZXBlbmRhbnQuCgpGcmkgSnVuIDEzIDEyOjAzOjMwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBkbyBub3QgZ2VuZXJhdGUgJnF1b3Q7IGZvciAiIG91dHNpZGUgb2YgYXR0cmlidXRlcwoJKiByZXN1bHQvLyo6IHRoaXMgY2hhbmdlcyB0aGUgb3V0cHV0IG9mIHNvbWUgdGVzdHMKCk1vbiBKdW4gIDkgMTI6Mjg6NTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHhtbElPLmM6IHRyeWluZyB0byBmaXggIzExNDI3NyBhYm91dCB3aGVuIGZpbGUKCSAgcmVtYXBwaW5nIGFuZCBlc2NhcGluZyBzaG91bGQgcmVhbGx5IGJlIGF0dGVtcHRlZC4KCk1vbiBKdW4gIDkgMTE6MDY6MDkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy8qOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBHbWFuIGZvciBidWlsZGluZyBkb2NzCgkqIHZhbGlkLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmg6IGFwcGxpZWQgYSBwYXRjaCBmcm9tCgkgIEdhcnkgUGVubmluZ3RvbiB0byBwcm92aWRlIGFuIGFsbG9jYXRvciBmb3IgeG1sVmFsaWRDdHh0CgkqIHhtbHJlYWRlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSmFjZWsgS29uaWVjem55IGZpeGluZyBidWcKCSAgIzExMzU4MCBhYm91dCBkYXRhIG5vdCBiZWluZyBwYXNzZWQgaW1tZWRpYXRlbHkuCgpUaHUgSnVuICA1IDExOjMxOjAyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgYSBjb3VwbGUgb2YgcGF0Y2hlcyBmcm9tIE1hcmsgSXR6Y292aXR6CgkgIHRvIGhhbmRsZSBzYXZpbmcgYmFjayAiVVRGLTE2IiBkb2N1bWVudHMuCgpNb24gSnVuICAyIDIxOjU2OjE1IE1WVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOiBjb21taXRpbmcKCSAgc29tZSB3b3JrIGRvbmUgd2hpbGUgaW4gdGhlIE1hbGRpdmVzIChoZW5jZSB0aGUgdGltZXpvbmUgb24gdGhlCgkgIGxhcHRvcCAhKQoJKiByZXN1bHQvc2NoZW1hcy9sZW5ndGgzKiB0ZXN0L3NjaGVtYXMvZGV0ZXIwXyoKCSAgdGVzdC9zY2hlbWFzL2dyb3VwMF8qOiBzb21lIHRlc3RzIGFkZGVkIHRvbwoKTW9uIEp1biAgMiAxNTozNDoxNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYzogc21hbGwgZml4CgkqIHhtbElPLmM6IGZpeGVkIGFuIGVycm9yIG1lc3NhZ2UKClR1ZSBNYXkgMjAgMTQ6MjE6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhpbmcgUmVkIEhhdCBidWcgIzkxMDEzIHdoZXJlIHhtbGxpbnQgd2FzCgkgIGFjY2VwdGluZyBhbiBpbXByb3BlciBVVEY4IHNlcXVlbmNlCgpTYXQgTWF5IDE3IDEyOjUzOjExIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogdGhyZWFkcy5jOiBhcHBsaWVkIHRoZSBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3IgZ2V0dGluZwoJICByaWQgb2YgZXh0cmEgdGhyZWFkcyBpbiBhIGR5bmFtaWMgbGlicmFyeS4KCSogd2luMzIvY29uZmlndXJlLmpzOiB0aHJlYWRzIGRlZmF1bHQgdG8gJ25hdGl2ZScgbm93LgoKRnJpIE1heSAxNiAxMzoxNzo1MiBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhpbmcgIGJ1ZyAjMTEyOTA0OiBodG1sIG91dHB1dCBtZXRob2QgZXNjYXBlZAoJICBwbHVzIHNpZ24gY2hhcmFjdGVyIGluIFVSSSBhdHRyaWJ1dGUuCgpUaHUgTWF5IDE1IDE4OjA2OjE4IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGJ1aWxkX2dsb2IucHkgZ2xvYmFsLmRhdGEgZ2xvYmFscy5jIHBhcnNlci5jCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaDogcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgZm9yIHNldHRpbmcKCSAgdXAgdGhyZWFkcyBnbG9iYWwgZGVmYXVsdHMuCgkqIGRvYy9saWJ4bWwyLWFwaS54bWw6IHRoaXMgZXh0ZW5kcyB0aGUgQVBJIHdpdGggbmV3IGZ1bmN0aW9ucwoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkKCSAgcHl0aG9uL3Rlc3RzL3RocmVhZDIucHk6IGludGVncmF0ZWQgdGhlIGFzc29jaWF0ZWQgdGVzdGNhc2UgYW5kCgkgIGZpeGVkIHRoZSBlcnJvciBzdHJpbmcgdXNlZCBpbiByZWFkZXIyCgpXZWQgTWF5IDE0IDE0OjU2OjQ2IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW06IHRyeWluZwoJICB0byBjb25jaWxpYXRlIC0td2l0aC1weXRob249IHJlcXVpcmVtZW50cyBhbmQgUlBNIGJ1aWxkcywKCSAgYSBQSVRBIHJlYWxseS4uLgoKVHVlIE1heSAxMyAxODozMDozNCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IG9vcHMgbGFzdCBjb21taXQgaW50cm9kdWNlZCBhIG1lbW9yeSBsZWFrLgoKVHVlIE1heSAxMyAxODoxMDozOCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgZG9jL3htbGxpbnQueG1sOiBhZGRlZCAtLW5vbmV0IG9wdGlvbgoJKiBkb2MvTWFrZWZpbGUuYW06IGZpeGluZyAjMTEyODAzIGJ5IGFkZGluZyAtLW5vbmV0IHdoZW4gY2FsbGluZwoJICB4c2x0cHJvYyBvciB4bWxsaW50CgkqIGRvYy94bWxsaW50LnhtbCBkb2MveG1sbGludC4xOiBhbHNvIGFkZGVkIC0tc2NoZW1hIGRvYyBhbmQKCSAgcmVidWlsdAoJKiBIVE1McGFyc2VyLmM6IGNsZWFuZWQgdXAgdGhlIEhUTUwgcGFyc2VyIGNvbnRleHQgYnVpbGQgd2hlbiAKCSAgdXNpbmcgYW4gVVJMCgpUdWUgTWF5IDEzIDE2OjM1OjA0IEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBhZGRlZCBhIGNvbW1lbnQgYWJvdXQgYnVnICMxMTI5MDIgCgpNb24gTWF5IDEyIDIxOjU4OjAwIEVEVCAyMDAzIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogbWlub3IgY2xlYW51cCBvZiBjb25maWd1cmUgJy0taGVscCcgZGlzcGxheQoJKiBlcnJvci5jOiBlbmhhbmNlZCB4bWxQYXJzZXJQcmludEZpbGVDb250ZXh0IHRvIGZpeCBidWcgIzEwOTk0MgoKTW9uIE1heSAxMiAxNzo1MzozMCBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IFBJIG5vZGVzIGluIGV4dGVybmFsIHN1YnNldCB3ZXJlIG5vdCBmcmVlZCA6LVwKCSAgZml4ZXMgYnVnICMxMTI4NDIKCk1vbiBNYXkgMTIgMTE6MjM6MjcgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhZGRlZCAtLXNjaGVtYSBvcHRpb24gdG8gcnVuIFdYUyBzY2hlbWEgdmFsaWRhdGlvbgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOgoJICB0cmllZCB0byBpbXByb3ZlIGVycm9yIHJlcG9ydGluZyBpbiB0aGUgU2NoZW1hIGNvZGUsIHNvbWUgY2xlYW51cAoJICB0b28uCgpTdW4gTWF5IDExIDE2OjEzOjIwIEVEVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgc29tZSBwcm9ibGVtcyBpbiB0aGUgaGFuZGxpbmcgb2YgZXJyb3JzLAoJICBhbmQgYXR0cmlidXRlcyBhZGRyZXNzZWQgYnkgcmVmZXJlbmNlcy4KCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogZHJvcHBlZCB0aGUgdmVyYm9zaXR5IGxldmVsCgkgIGFuZCBhZGRlZCBhIGNvdXBsZSBvZiBuZXcgdGVzdHMKClNhdCBNYXkgMTAgMTY6MDE6MjEgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBTdOlwaGFuZSBCaWRvdWwgZm91bmQgYW4gb2ZmIGJ5IG9uZSBhZGRyZXNzaW5nCgkgIGVycm9yIG9uIHRoZSBlcnJvciBoYW5kbGluZy4KCkZyaSBNYXkgIDkgMTk6MDg6MjAgRURUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IHRyeWluZyB0byBmaXggIzExMjY3MwoKRnJpIE1heSAgOSAxODoxNDoxNiBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgY2F0YWxvZy5jIHBhcnNlci5jIHJlbGF4bmcuYzogcmVtb3ZlZCBtdWx0aXBsZQoJICB3YXJuaW5nLCB0aGlzIGZpeGVkIGEgYnVnIGFuZCBzaG91bGQgY2xvc2UgIzExMTU3NAoKRnJpIE1heSAgOSAxNTozNDozMiBFRFQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmM6IGZpeGluZyBidWcgIzEwNDA4MSB3aXRoIHhzOmFsbCB3aXRoIGFuIGVsZW1lbnQKCSAgaG9sZGluZyBtaW5PY2N1cnM9IjAiCgkqIHRlc3Qvc2NoZW1hcy9hbGxfKiByZXN1bHQvc2NoZW1hcy9hbGxfKjogYWRkZWQgc29tZSByZWdyZXNzaW9uCgkgIHRlc3RzIGZvciB0aGF0IGJ1ZwoJKiB4bWxsaW50LmMgeG1scmVhZGVyLmM6IHBhdGNoZXMgZnJvbSBKb2VyZyBTY2htaXR6LUxpbm5ld2ViZXIgYW5kCgkgIEdhcnJ5IFBlbm5pbmd0b24gdG8gY29tcGlsZSB3aXRob3V0IHNjaGVtYXMgc3VwcG9ydC4KClRodSBNYXkgIDEgMTA6MDI6MzUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggeG1sVW5saW5rTm9kZSgpIGZvciBEVERzLgoKV2VkIEFwciAzMCAxNDoxNjowOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sMi1jb25maWcuaW46IHRyeSB0byBmaXggUmVkIGhhdCBidWcgIzg5OTU3LCBkbyBub3QKCSAgb3V0cHV0IC1ML3Vzci9saWI2NAoJKiB4bWxyZWFkZXIuYzogZml4ZWQgYSB0eXBvIGluIGEgY29tbWVudAoKVHVlIEFwciAyOSAwNzozMjowMiBNRFQgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4uZW50PgoKCSogZG9jL3R1dG9yaWFsL2FwaC5odG1sLCBpeDAxLmh0bWwKCWZvcmdvdCB0byBjdnMgYWRkIHRoZSBuZXcgZmlsZXMuIFRoYW5rcyB0byBSb2xhbmQgdmFuIExhYXIKCWZvciBwb2ludGluZyB0aGlzIG91dAoKVHVlIEFwciAyOSAxNDozNjo0OSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jIGRvYy9saWJ4bWwyLWFwaS54bWw6IGZpeGluZyBhIGZ1bmN0aW9uIGNvbW1lbnQKCSogZG9jL01ha2VmaWxlLmFtIGRvYy9hcGlidWlsZC5weSBkb2MvZ25vbWUteG1sLnNnbWw6IHN3aXRjaGluZwoJICB0byB0aGUgWE1ML1hTTFQgZG9jIGdlbmVyYXRpb24gY2xvc2luZyAjMTExNzk5CgkqIGRvYy9odG1sLyo6IGNvbXBsZXRlIHVwZGF0ZSBvZiB0aGUgSFRNTCByZXN1bHRzCgpNb24gQXByIDI4IDE0OjUxOjQxIENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvZGVmZ2VuLnhzbDogZml4ZWQgdGhlIGNvbmRpdGlvbmFsIGZvciB1bmljb2RlIG1hcCwKCSAgcmVtb3ZlZCBoYXJkY29kZWQgc2NoZW1hIGVudHJpZXMKCk1vbiBBcHIgMjggMDI6MTk6MDAgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9kZWZnZW4ueHNsOiBuZXcgZmlsZSwgc3R5bGVzaGVldCBmb3IgZ2VuZXJhdGluZyAKCSAgd2luMzIvbGlieG1sMi5kZWYuc3JjIGZyb20gZG9jL2xpYnhtbDItYXBpLnhtbAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGlzIGF1dG9nZW5lcmF0ZWQgZnJvbSBub3cgb24sIGNoYW5nZXMKCSAgdG8gdGhpcyBmaWxlIHdpbGwgbm90IGFwcGVhciBoZXJlIGFueW1vcmUKCk1vbiBBcHIgMjggMDA6MTI6MTEgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qcyBweXRob24vc2V0dXAucHkuaW46IGFwcGxpZWQgcGF0Y2gKCSAgZnJvbSBTdOlwaGFuZSBCaWRvdWwgZm9yIHRoZSBQeXRob24gYmluZGluZ3Mgb24gdGhlIG5ldwoJICByZWxlYXNlLgoKU3VuIEFwciAyNyAxNzo1NjoyMSBDRVNUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIGRlYnVnWE1MLmM6IGluY2x1ZGVkIGxpYnhtbC91cmkuaCBmb3IgeG1sQ2Fub25pY1BhdGgKCSAgZGVjbGFyYXRpb24KCSogd2luMzIvY29uZmlndXJlLmpzOiB0aHJlYWQtZW5hYmxlZCBidWlsZCBpcyBub3cgZGVmYXVsdAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIG1vcmUgZXhwb3J0cwoKU3VuIEFwciAyNyAwMDoyMzowNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBkb2MvKi54c2wgZG9jLyouaHRtbDogdXBkYXRlZCB0aGUgd2ViIHNpdGUgc2VwYXJhdGVkCgkgIGRldmVsb3BlcnMgZnJvbSBjb21tb24gcGFnZXMsIG1hZGUgdGhlIHRyYW5zaXRpb24gdG8gWEhUTUwxLAoJICBhZGRlZCB2YWxpZGl0eSBjaGVja2luZyB0byB0aGUgbWFrZWZpbGUgcnVsZXMuCgpTYXQgQXByIDI2IDIzOjE3OjUxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4IGZvciB4bWxJT1BhcnNlRFREIHNhbWUgYXMgcHJldmlvdXMgYW5kIHJlcG9ydGVkCgkgIGJ5IFBldHIgUGFqYXMKClNhdCBBcHIgMjYgMTU6MjY6MDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhcHBsaWVkIGZpeCB0byB4bWxTQVhQYXJzZURURCBmcm9tIE1hbGNvbG0gVHJlZGlubmljawoJICBjbG9zaW5nICMxMTE2MzgKClNhdCBBcHIgMjYgMTQ6MDA6NTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGZpeGVkIGEgcHJvYmxlbSBpbiB0aGUgZ2VuZXJhdG9yIHdoZXJlCgkgIHRoZSB3YXkgZnVuY3Rpb25zIGFyZSByZW1hcHBlZCBhcyBtZXRob2RzIG9uIGNsYXNzZXMgd2FzCgkgIG5vdCBzeW1ldHJpYyBhbmQgZGVwZW5kYW50IG9uIHB5dGhvbiBpbnRlcm5hbCBoYXNoIG9yZGVyLAoJICBhcyByZXBvcnRlZCBieSBTdOlwaGFuZSBCaWRvdWwKCkZyaSBBcHIgMjUgMjE6NTI6MzMgTURUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbDoKCXhtbHR1dG9yaWFsLnhtbAoJeG1sdHV0b3JpYWwucGRmCgkqLmh0bWwKCWFkZCBhcHBlbmRpeCBvbiBnZW5lcmF0aW5nIGNvbXBpbGVyIGZsYWdzLCBtb3JlIGluZGV4aW5nCgpTYXQgQXByIDI2IDAxOjEwOjQ4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmlvZGVmLmggdm1zL2J1aWxkX2xpYnhtbC5jb206IGFwcGxpZWQgcGF0Y2ggZnJvbSBDcmFpZyBBLiBCZXJyeQoJICB0byBnZXQgbGlieG1sLTIuNS43IHRvIGNvbXBpbGUgb24gT3BlblZNUwoKRnJpIEFwciAyNSAxODo0MjozNSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBhbiB4bWxQYXJzZURURCBidWcgcmFpc2VkIGJ5IFBldHIgUGFqYXMKCkZyaSBBcHIgMjUgMTU6MjA6MjkgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbSBkb2MveG1sY2F0YWxvZy4xIGRvYy94bWxjYXRhbG9nX21hbi54bWwKCSAgZG9jL3htbGxpbnQuMSBkb2MveG1sbGludC54bWw6IGF1dG9tYXRlZCB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUKCSAgbWFuIHBhZ2UgYmFzZWQgb24geHNsdHByb2MgYW5kIGEgc3R5bGVzaGVldCBQSSBpbiB0aGUgWE1MLgoKRnJpIEFwciAyNSAxMjozNzozMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbGxpbnQuKjogdHJ5aW5nIHRvIGZpeCAjMTEwNTQxIHdoZXJlICZuYnNwOyBnZW5lcmF0ZWQKCSAgY2hhcmFjdGVyIHByZXZlbnRpbmcgcmVuZGVyaW5nIGJ5IHRoZSBtYW4gY29tbWFuZC4KCkZyaSBBcHIgMjUgMDE6MDk6MjMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjUuNwoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoJKiBkb2MvYXBpYnVpbGQucHk6IGZpeGVkIHRoZSBzY3JpcHQKClRodSBBcHIgMjQgMTk6MTE6MTIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGRvYy9hcGlidWlsZC5weTogbWFrZSBzdXJlIHRoZSBPT00gY29kZSBkb24ndAoJICBnZXQgaW4gdGhlIHdheSBvZiB0aGUgYnVpbGRzCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGF1dG9tYXRpYyB1cGRhdGUKClRodSBBcHIgMjQgMTg6MDE6NDYgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHRlc3RPT00uYyB0ZXN0T09NbGliLltjaF0gOiBpbnRlZ3JhdGVkIHRoZSBPdXQgT2YKCSAgTWVtb3J5IHRlc3QgZnJvbSBIYXZvYyBQZW5uaW5ndG9uICMxMDkzNjgKCSogU0FYLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHVyaS5jIHZhbGlkLmMKCSAgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1scmVnZXhwLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBhIGxvdCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBjbGVhbnVwcwoJICBiYXNlZCBvbiB0aGUgcmVzdWx0cyBvZiB0aGUgT09NIHRlc3RpbmcKCSogY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlMi5weTogc2VlbXMgSSBmb3Jnb3QgdG8gY29tbWl0IHRoZQoJICBzY3JpcHQuCgpXZWQgQXByIDIzIDE3OjE2OjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogdHJpdmlhbCBmaXggZm9yIDEwOTc3NCByZW1vdmluZyBhIHdhcm5pbmcKCldlZCBBcHIgMjMgMTU6NDk6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBTQVguYyBjYXRhbG9nLmMgZGVidWdYTUwuYyBwYXJzZXIuYzogdHJ5IHRvIGZpbmQKCSAgbW9yZSBwbGFjZXMgd2hlcmUgeG1sQ2Fub25pY1BhdGgoKSBtdXN0IGJlIHVzZWQgdG8gY29udmVydAoJICBmaWxlbmFtZXMgdG8gVVJMcywgdHJ5aW5nIHRvIGZpeCAjMTExMDg4CgpXZWQgQXByIDIzIDA5OjM1OjEyIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weTogYXBwbGllZCBwYXRjaCBmcm9tIAoJICBCcmVudCBNIEhlbmRyaWNrcyBhZGRpbmcgYmluZGluZyBmb3IgeG1sQ2F0YWxvZ0FkZExvY2FsCgpUdWUgQXByIDIyIDE1OjE4OjAxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHRyaWVkIHRvIGZpeCAjOTg4NzkgYWdhaW4gaW4gYSBtb3JlIHNvbGlkCgkgIHdheS4KClR1ZSBBcHIgMjIgMTM6NTg6NDMgQ0VTVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIG1vcmUgZXhwb3J0cyBmcm9tIHRoZSByZWxheG5nIGFuZAoJICB4bWxyZWFkZXIgY2xhbgoKVHVlIEFwciAyMiAxMDozNToxMyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgdGVzdC92YWxpZC9ucyogdGVzdC9yZXN1bHQvbnMqOiBhcHBsaWVkIHRoZSBwYXRjaAoJICBwcm92aWRlZCBieSBCcmVudCBIZW5kcmlja3MgZml4aW5nICMxMDU5OTIgYW5kIGludGVncmF0ZWQgdGhlCgkgIGV4YW1wbGVzIGluIHRoZSB0ZXN0c3VpdGUuCgpUdWUgQXByIDIyIDAxOjA2OjA5IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBUT0RPOiB1cGRhdGVkIGEgYml0CgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgdGhlIGNvbW1lbnQsIHRocmVhZHMgbm93IGRlZmF1bHQgdG8gb24KCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIGFuIGVycm9uZW91cyB4bWxNYWxsb2NBdG9taWMoKSBjYWxsCgpNb24gQXByIDIxIDIzOjMzOjM4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgbGlieG1sLmggcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHhtbGxpbnQuYwoJICB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogYSBsb3Qgb2YgcGVyZm9ybWFuY2Ugd29yawoJICBlc3BlY2lhbGx5IHRoZSBzcGVlZCBvZiBzdHJlYW1pbmcgdGhyb3VnaCB0aGUgcmVhZGVyIGFuZCBwdXNoCgkgIGludGVyZmFjZS4gU29tZSB0aHJlYWQgcmVsYXRlZCBvcHRpbWl6YXRpb25zLiBOZWFybHkgZG91YmxlZCB0aGUKCSAgc3BlZWQgb2YgcGFyc2luZyB0aHJvdWdoIHRoZSByZWFkZXIuCgpTdW4gQXByIDIwIDEwOjM2OjA1IE1EVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwKCSogZG9jL3htbGxpbnQuMQoJdXBkYXRlIG1hbiBwYWdlIHRvIGV4cGxhaW4gdXNlIG9mIC0tc3RyZWFtCgpTYXQgQXByIDE5IDAyOjAzOjI0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGMxNG4uYyBjYXRhbG9nLmMgZW5jb2RpbmcuYyBnbG9iYWxzLmMKCSAgbmFub2h0dHAuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyByZWxheG5nLmMgdHJlZS5jIHVyaS5jCgkgIHhtbG1lbW9yeS5jIHhtbHJlYWRlci5jIHhtbHJlZ2V4cC5jIHhwYXRoLmMgeHBvaW50ZXIuYwoJICBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGFkZGVkCgkgIHhtbE1hbGxvY0F0b21pYygpIHRvIGJlIHVzZWQgd2hlbiBhbGxvY2F0aW5nIGJsb2NrcyB3aGljaAoJICBkbyBub3QgY29udGFpbnMgcG9pbnRlcnMsIGFkZCB4bWxHY01lbVNldHVwKCkgYW5kIHhtbEdjTWVtR2V0KCkKCSAgdG8gYWxsb3cgcmVnaXN0ZXJpbmcgdGhlIGZ1bGwgc2V0IG9mIGZ1bmN0aW9ucyBuZWVkZWQgYnkKCSAgYSBnYXJiYWdlIGNvbGxlY3RpbmcgYWxsb2NhdG9yIGxpa2UgbGliZ2MsIHJlZiAjMTA5OTQ0CgpGcmkgQXByIDE4IDE2OjM3OjQxIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHN3aXRjaGVkIHRvIGhhdmUgdGhyZWFkIHN1cHBvcnQgZW5hYmxlZCBieSBkZWZhdWx0LAoJICBkaWRuJ3QgZ290IHRyb3VibGVzIHdpdGggQUJJIGNvbXBhdGliaWxpdHkgb24gTGludXgsIGhvcGUgaXQKCSAgd29uJ3QgYnJlYWsgb24gc3RyYW5nZSBPU2VzLCBpZiB5ZXMsIHJlcG9ydCB0aGUgc3lzdGVtIElECgkqIGRvYy9saWJ4bWwyLWFwaS54bWw6IGp1c3QgcmVidWlsdCB0aGUgQVBJCgpGcmkgQXByIDE4IDE0OjMxOjE1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCBwYXJzZXIuYyB4bWxJTy5jIERPQ0JwYXJzZXIuYzogCgkgIGFkZGVkIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGUsIHRlc3RlZCB3aXRoIGEgMytHQiBpbnN0YW5jZSwKCSAgYW5kIHNvbWUgY2xlYW51cC4KCSogY2F0YWxvZy5jOiBhZGRlZCBhIFRPRE8KCSogTWFrZWZpbGUuYW06IGFkZGVkIHNvbWUgIm1ha2UgdGVzdHMiIGNvbW1lbnRzCgpUaHUgQXByIDE3IDE0OjUxOjU3IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IHNvbWUgY2xlYW51cHMKCSogZG9jL3htbHJlYWRlci5odG1sOiBleHRlbmRlZCB0aGUgZG9jdW1lbnQgdG8gY292ZXIgUmVsYXhORyBhbmQKCSAgdHJlZSBvcGVyYXRpb25zCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVhZGVyWzQ2XS5weTogYWRkZWQgc29tZQoJICB4bWxSZWFkZXIgZXhhbXBsZS9yZWdyZXNzaW9uIHRlc3RzCgkqIHJlc3VsdC9yZWxheG5nL3R1dG9yKi5lcnI6IHVwZGF0ZWQgdGhlIG91dHB1dCBvZiBhIG51bWJlciBvZiB0ZXN0cwoKVGh1IEFwciAxNyAxMTozNTozNyBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiB2YWxncmluZCBwb2ludGVkIG91dCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGVycm9yLgoKVGh1IEFwciAxNyAxMTowNjoyOCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaAoJICB4bWxyZWFkZXIuYzogYXVnbmVtdGluZyB0aGUgQVBJcywgY2xlYW51cHMuCgkqIHBhcnNlci5jOiBjbGVhbnVwIGJ1ZyAjMTExMDA1CgkqIHhtbElPLmM6IGFkZGVkIHNvbWUgbWlzc2luZyBjb21tZW50cwoKV2VkIEFwciAxNiAxNzo0Njo1MCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIHhtbGxpbnQuYzogbW9yZSB3b3JrIG9uIFJlbGF4Tkcgc3RyZWFtaW5nIHZhbGlkYXRpb24KCSAgdHJ5aW5nIHRvIGltcHJvdmUgdGhlIHN1YnNldCBjb21waWxlZCwgYW5kIG1vcmUgdGVzdGluZy4KCSogZG9jL2Rvd25sb2Fkcy5odG1sIGRvYy94bWwuaHRtbCBkb2MveG1sbWVtLmh0bWw6IHNvbWUgdXBkYXRlcyBvbiB0aGUKCSAgZG9jdW1lbnRhdGlvbgoJKiB0ZXN0L3JlbGF4bmcvdHV0b3IxMV8xXzMueG1sOiBmaXhlcyB0aGUgRFREIHBhdGgKCSogcmVzdWx0L3JlbGF4bmcvKi5lcnI6IGZpeCBzb21lIG9mIHRoZSBvdXRwdXRzCgpXZWQgQXByIDE2IDAxOjI4OjE1IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgeG1scmVhZGVyLmMgeG1sbGludC5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaDogaW1wbGVtZW50ZWQgc3RyZWFtaW5nIG9mCgkgIFJlbGF4TkcgKHdoZW4gcG9zc2libGUpIG9uIHRvcCBvZiB0aGUgeG1sUmVhZGVyIGludGVyZmFjZSwKCSAgcHJvdmlkZWQgaXQgYXMgeG1sbGludCAtLXN0cmVhbSAtLXJlbGF4bmcgLnJuZyAueG1sCgkgIFRoaXMgc2VlbXMgdG8gbW9zdGx5IHdvcmsuCgkqIE1ha2VmaWxlLmFtOiB1cGRhdGVkIHRvIHRlc3QgUmVsYXhORyBzdHJlYW1pbmcKCk1vbiBBcHIgMTQgMTg6MDg6MzMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IGludGVncmF0ZWQgdGhlIHJlZ2V4cAoJICBiYXNlZCB2YWxpZGl0eSBjaGVja2luZyBvZiBmcmFnbWVudHMgb2YgdGhlIGRvY3VtZW50IGZvcgoJICB3aGljaCB0aGUgUk5HIGNhbiBiZSBjb21waWxlZCB0byByZWdleHBzLiBXb3JrcyBvbiBhbGwgcmVncmVzc2lvbgoJICB0ZXN0cywgb25seSBmaXggbmVlZGVkIGlzIHJlbGF0ZWQgdG8gZXJyb3IgbWVzc2FnZXMuCgpTdW4gQXByIDEzIDIxOjUxOjAwIENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgeG1scmVnZXhwLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaDogU3RhcnRpbmcgd29yayBwcmVjb21waWxpbmcKCSAgcGFydHMgb2YgUmVsYXhORyBzY2hlbWFzLiBOb3QgcGx1Z2dlZCBvbnRvIHZhbGlkaXR5IGNoZWNraW5nCgkgIHlldCwganVzdCB0aGUgcmVnZXhwIGJ1aWxkaW5nIHBhcnQuIE5lZWRlZCB0byBleHRlbmQgc29tZQoJICBvZiB0aGUgYXV0b21hdGEgYW5kIHJlZ2V4cCBBUElzLgoKRnJpIEFwciAxMSAyMTozNjoyMSBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiBtYWtlIHN1cmUKCSAgeG1sbGludCAtLXN0cmVhbSBhbmQgeG1sbGludCAtLXN0cmVhbSAtLXZhbGlkIHJldHVybnMgZXJyb3JzCgkgIGNvZGUgYXBwcm9wcmlhdGVseQoKRnJpIEFwciAxMSAxMDo1OToyNCBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmg6IEFkZGVkIHRoZSBFeHBhbmQoKQoJICBhbmQgTmV4dCgpIG9wZXJhdGlvbiB0byB3b3JrIG9uIHN1YnRyZWVzIHdpdGhpbiB0aGUgcmVhZGVyCgkgIGZyYW1ld29yay4KCSogZG9jL2xpYnhtbDItYXBpLnhtbCBweXRob24vbGlieG1sMmNsYXNzLnR4dDogcmVzdWx0aW5nIHVwZGF0ZXMKCSogcHl0aG9uL3Rlc3RzL3JlYWRlcjUucHk6IGFkZGVkIGFuIGV4YW1wbGUgZm9yIHRob3NlIG5ldwoJICBmdW5jdGlvbnMgb2YgdGhlIHJlYWRlci4KClRodSBBcHIgMTAgMjM6Mzg6MTMgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IHBhdGNoIGZyb20gVmFzaWx5IFRjaGVrYWxraW4gdG8gZml4ICMxMDk4NjUKClRodSBBcHIgMTAgMTU6MzI6NDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhpbmcgSGFzVmFsdWUgZm9yIG5hbWVzcGFjZSBhcyByYWlzZWQgYnkgCgkgIERlbnlzIER1Y2hpZXIKCldlZCBBcHIgIDkgMTQ6MDc6MTggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6ICBleHBvcnRlZAoJICBodG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dCgpIGl0IHdhcyBzdGF0aWMKCldlZCBBcHIgIDkgMTM6MjE6NDggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6CgkgIHVwZGF0ZSBmcm9tIENoYXJsZXMgQm96ZW1hbiBmb3IgZGF0ZSBhbmQgZHVyYXRpb24gdHlwZXMKCSogdGVzdC9zY2hlbWFzL2RhdGVfMC4qIHRlc3Qvc2NoZW1hcy9kdXJfMC4qCgkgIHJlc3VsdC9zY2hlbWFzL2RhdGVfMC4qIHJlc3VsdC9zY2hlbWFzL2R1cl8wLio6IHVwZGF0ZWQgdG9vCgpNb24gQXByICA3IDEyOjE5OjI2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgdmFsaWQuYyB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOgoJICBmaXhpbmcgYnVnICMxMDcxMjksIHJlbW92aW5nIGV4Y2Vzc2l2ZSBhbGxvY2F0aW9uIGFuZCBjYWxscwoJICB0byAqcHJpbnRmIGluIHRoZSBjb2RlIHRvIGJ1aWxkIFFOYW1lIHN0cmluZ3MuCgpTYXQgQXByICA1IDExOjQxOjM2IENFU1QgMjAwMyBJZ29lIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBmaXhlZCBjb25kaXRpb25hbCBleHBvcnRzLCByZXBvcnRlZCBieQoJICBMdWtlIE11cnJheS4KCkZyaSBBcHIgIDQgMTg6MDg6MDAgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIHBvc3NpYmxlIHByb2JsZW0gd2l0aCB4bWxSZWNvdmVyTWVtb3J5KCkKClRodSBBcHIgIDMgMTc6MjQ6NDQgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyaW8uYyB0cmlvLmggdHJpb2RlZi5oIHRyaW9uYW4uYyB0cmlvbmFuLmggdHJpb3AuaCB0cmlvc3RyLmMKCSAgdHJpb3N0ci5oOiBCam9ybiBzZW50IGFuIHVwZGF0ZSBmb3IgdGhlIFRSSU8gcG9ydGFiaWxpdHkgbGF5ZXIuCgpUdWUgQXByICAxIDIxOjU3OjI2IENFU1QgMjAwMyBJZ29yIFpsYXRrb3ZpYyA8aWdvckB6bGF0a292aWMuY29tPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBleHBvcnRlZCBuZXcgZnVuY3Rpb25zCgpUdWUgQXByICAxIDEzOjA5OjQ2IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gTkVXUzogcHJlcGFyaW5nIHJlbGVhc2UgMi41LjYKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKClR1ZSBBcHIgIDEgMTE6NTI6MTUgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmaXhlZCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgcG9pbnRlZCBieSB2YWxncmluZAoJICBvbiBDMTROdGVzdHMKClR1ZSBBcHIgIDEgMDA6MTI6MjggQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogb25lIG1vcmUgZml4dXAgb2YgZXJyb3IgbWVzc2FnZSByZXBvcnRpbmcKCk1vbiBNYXIgMzEgMTg6MzY6MzIgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIGJ1ZyAjMTA5MjI1LCBhbmQgZml4ZWQgYW4gdW5pbml0aWFsaXplZAoJICB2YXJpYWJsZSBwb2ludGVkIG91dCBieSB2YWxncmluZAoKTW9uIE1hciAzMSAxODowNToyMiBDRVNUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiB0cnkgdG8gd29yayBvbiBidWcgIzEwOTIyNSBhbmQgcHJvdmlkZSBiZXR0ZXIKCSAgZXJyb3IgcmVwb3J0cy4KCSogcmVzdWx0L3JlbGF4bmcvKiA6IHRoaXMgY2hhbmdlIHRoZSBvdXRwdXQgb2YgYSBudW1iZXIgb2YgdGVzdHMKCSogeGluY2x1ZGUuYzogZml4aW5nIHRoZSBwYXJzZWQgZW50aXR5IHJlZGVmaW5pdGlvbiBwcm9ibGVtCgkgIHJhaXNlZCBvbiB0aGUgbGlzdC4KCSogdGVzdC9zY2hlbWFzL2RhdGVfMC54c2Q6IHVwZGF0ZWQgdGhlIGRhdGUgdGVzdCBjLmYuIEUyLTEyCgpNb24gTWFyIDMxIDEzOjE5OjA0IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgZGF0ZSBjb21wYXJpc29uIHRvIGhhbmRsZSB0aGUgdHpvCgkgIFRoZSBvbmx5IGZhaWx1cmVzIGxlZnQgYXJlIGRpc2FncmVlbWVudHMgb24gTm90YXRpb25zIGFuZAoJICAnKzEnIG5vdCBiZWluZyBhbGxvd2VkIGZvciB1bG9uZywgdWludCwgdXNob3J0IGFuZCB1Ynl0ZS4KCk1vbiBNYXIgMzEgMTI6MTE6NDcgQ0VTVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmaXhlZCBnTW9udGggcGFyc2luZyByb3V0aW5lIGFjY29yZGluZ2x5CgkgIHRvIHRoZSBYTUwgU2NoZW1hcyBlcnJhdGEKCSAgaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNS94bWxzY2hlbWEtZXJyYXRhI2UyLTEyCgpTdW4gTWFyIDMwIDIzOjA0OjE4IENFU1QgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgd29yayBvbiBYTUwgU2NoZW1hcyBkYXRhdHlwZXMKCSAgYW5kIGZhY2V0cyBzdXBwb3J0LiBDdXJyZW50bHkgb25seSBzY2hlbWFzIHdpdGggYmluSGV4IG9yCgkgIGJhc2U2NCBkb24ndCBjb21waWxlLiBBIGZldyBlcnJvciBsZWZ0IGluIHRoZSB0ZXN0IHN1aXRlOgoJICBmb3VuZCAxMDM1IHRlc3QgaW5zdGFuY2VzOiA5MTkgc3VjY2VzcyAyMyBmYWlsdXJlcwoJICBtb3N0IGFyZSBnZGF0ZSBvciBnZGF0ZXllYXIgZmFpbGluZyBjaGVjaywgYW5kIGEgZmV3IGNhc2VzIHdoZXJlCgkgIEphbWVzIGNsYXJrIHRlc3RzIHJlc3VsdHMgYXJlIHN0cmFuZ2UuCgkqIHZhbGlkLmM6IGFsbG93IHRvIHJldXNlIHRoZSBOb3RhdGlvbiBjaGVja2luZyByb3V0aW5lIHdpdGhvdXQKCSAgaGF2aW5nIGEgdmFsaWRhdGlvbiBjb250ZXh0LgoJKiBTQVguYzogcmVtb3ZlZCBhICNpZiAwCgpTYXQgTWFyIDI5IDE3OjM1OjA1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZvcmdvdCB0byBhcHBseSBvbmUgY2hlY2sgZnJvbSAjMTA2OTMxIHBhdGNoCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBtb3JlIHdvcmsgb24gWE1MIFNjaGVtYXMgZGF0YXR5cGVzCgpTYXQgTWFyIDI5IDExOjQ5OjI1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmggeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgd29yawoJICBvbiBjbGVhbmluZyB1cCBYTUwgU2NoZW1hcyBkYXRhdHlwZXMgYmFzZWQgb24gSmFtZXMgQ2xhcmsgdGVzdHMKCSAgdGVzdC94c2R0ZXN0L3hzZHRlc3QueG1sCgpGcmkgTWFyIDI4IDE0OjI0OjA4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogaW1wbGVtZW50ZWQgY29tcGFyaXNvbnMgZm9yIFNjaGVtYXMgdmFsdWVzLgoJKiB4bWxzY2hlbWFzdHlwZXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDogZml4ZWQKCSAgc29tZSBidWdzIGluIGR1cmF0aW9uIGhhbmRsaW5nLCBjb21wYXJpc29ucyBmb3IgZHVyYXRpb25zCgkgIGFuZCBkZWNpbWFscywgcmVtb3ZlZCBhbGwgbWVtb3J5IGxlYWtzIHBvaW50ZWQgb3V0IGJ5IEphbWVzCgkgIHRlc3RzdWl0ZS4gQ3VycmVudCBzdGF0dXMgaXMgbm93CgkgIGZvdW5kIDIzOCB0ZXN0IHNjaGVtYXM6IDE5NyBzdWNjZXNzIDQxIGZhaWx1cmVzCgkgIGZvdW5kIDEwMzUgdGVzdCBpbnN0YW5jZXM6IDgwMyBzdWNjZXNzIDEzMCBmYWlsdXJlcwoKRnJpIE1hciAyOCAwMDo0MTo1NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOiBmaXhlZCBidWdzIGFuZCBtZW1vcnkKCSAgbGVha3MgaW4gdGhlIFczQyBYTUwgU2NoZW1hcyBjb2RlCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBpbXBsZW1lbnRlZCBub25Qb3NpdGl2ZUludGVnZXIKCSogdGVzdC9zY2hlbWFzL2xlbmd0aDJfMC54c2QgcmVzdWx0L3NjaGVtYXMvbGVuZ3RoMl8wXzAuZXJyOgoJICBmaXhlZCB0aGUgdGVzdCBhbmQgcmVzdWx0LgoKVGh1IE1hciAyNyAyMjoyMzowNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgdHJlZS5jOiB0d28gcGF0Y2hlcyBmcm9tIEphbWVzIEJ1cnNhIG9uIHRoZSBIVE1MCgkgIHBhcnNlciBhbmQgYSB0eXBvCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiByZWluZGVudGluZywgZml4aW5nIGEgbWVtb3J5IGFjY2VzcwoJICBwcm9ibGVtIHdpdGggZGF0ZXMuCgpUaHUgTWFyIDI3IDE1OjUzOjM1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgIzEwOTIyNyBwcm92aWRpbmcgbW9yZSBjb250ZXh0IGluIGNhc2Ugb2YgCgkgIHN0YXJ0L2VuZCB0YWcgbWlzbWF0Y2gKCSogcHl0aG9uL3Rlc3RzL2N0eHRlcnJvci5weSBweXRob24vdGVzdHMvcmVhZGVyZXJyLnB5OiB1cGRhdGUgdGhlCgkgIHRlc3RzIGFjY29yZGluZ2x5CgpUaHUgTWFyIDI3IDE1OjIyOjQxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IHNob3VsZCBmaXggIzEwOTMyNyBlcnJvcnMgb24gbWVtb3J5IGFjY2Vzc2VzCgpUaHUgTWFyIDI3IDE1OjA2OjEzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IEZpeGVkIHJlb3BlbmluZyBvZiAjNzg2NjIgPGZvcm0gYWN0aW9uPSIuLi4iPgoJICBpcyBhbiBVUkkgcmVmZXJlbmNlCgpXZWQgTWFyIDI2IDIyOjM4OjM5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGJ1ZyAjMTA5MTYwIG9uIG5vbi1BU0NJSSBJRHMKCldlZCBNYXIgMjYgMTc6MzA6MzcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IE5vcm0gc3VnZ2VzdGVkIGEgbmljZXIgZXJyb3IgbWVzc2FnZSBmb3IgeG1sOnNwYWNlIHZhbHVlcwoJICBlcnJvcnMKCldlZCBNYXIgMjYgMDE6MzQ6MTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBmaXJzdCBwYXJ0IG9mIHRoZSBmaXggdG8KCSAgcGVyZm9ybWFuY2UgYnVnICMxMDg5MDUsIGFkZHMgeG1sWFBhdGhPcmRlckRvY0VsZW1zKCkgcHJvdmlkaW5nCgkgIGRvY3VtZW50IG9yZGVyIGZvciBub2Rlcy4KCSogcHl0aG9uL2xpYnhtbC5jOiBQeXRob24gbWF5IHJlcXVpcmUgVFJJTyBhcyBBbGJlcnQgQ2hpbiBwb2ludGVkIG91dAoKVHVlIE1hciAyNSAxNjowNzowMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogcmVtb3ZpbmcgYSB3YXJuaW5nIHdpdGggU3VuIGNvbXBpbGVyCgkgIGJ1ZyAjMTA5MTU0CgpUdWUgTWFyIDI1IDA3OjAyOjU2IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwKCSogZG9jL3htbGxpbnQuMQoJdXBkYXRlIHhtbGxpbnQgbWFuIHBhZ2Ugd2l0aCAtLXJlbGF4bmcgb3B0aW9uCgpUdWUgTWFyIDI1IDEyOjA3OjAzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9zZXR1cC5weS5pbiA6IHdhcyBtaXNzaW5nICJkcnZfbGlieG1sMi5weSIKCk1vbiBNYXIgMjQgMTk6Mzg6MDUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIHhwYXRoLmM6IHNvbWUgY2hhbmdlcyByZWxhdGVkIHRvIHRoZSBuZXcgd2F5IG9mIAoJICBoYW5kbGluZyBSZXN1bHQgVmFsdWUgVHJlZSwgYmVmb3JlIDIuNS41CgpNb24gTWFyIDI0IDE2OjM2OjIzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBORVdTOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjUuNQoJKiBkb2MvKiA6IHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gYW5kIHJlZ2VuZXJhdGVkIGl0LgoKTW9uIE1hciAyNCAxNDo1NjowMSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhlZCBzb21lIHByb2JsZW1zIHJlbGF0ZWQgdG8gIzc1ODEzIGFib3V0IGhhbmRsaW5nCgkgIG9mIFJlc3VsdCBWYWx1ZSBUcmVlcwoKU3VuIE1hciAyMyAyMjo1NzoyMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogYXBwbGllZCBhIHNldCBvZiBwYXRjaGVzIGZyb20gTG9yZW56byBWaWFsaSBjb3JyZWN0aW5nCgkgIFVSSSBwYXJzaW5nIGVycm9ycy4KClN1biBNYXIgMjMgMjI6MDA6MTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHZhbGlkaXR5IHN0YXR1cyB3YXMgbm90IHBhc3NlZCBiYWNrIHdoZW4gdmFsaWRhdGluZyBpbgoJICBlbnRpdGllcywgYnV0IHJhaXNlZCBieSBPbGl2ZXIgRmlzY2hlcgoKU3VuIE1hciAyMyAyMTozMDo1MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBhdm9pZCBlc2NhcGluZyAnLCcgaW4gVVJJcwoKU3VuIE1hciAyMyAxMjo1NzowMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4aW5nIGJ1ZyAjMTA4OTc2IGdldCB0aGUgSUQvUkVGcyB0byByZWZlcmVuY2UgCgkgIHRoZSBJRCBpbiB0aGUgZG9jdW1lbnQgY29udGVudCBhbmQgbm90IGluIHRoZSBlbnRpdHkgY29weQoJKiBTQVguYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogbW9yZSBjaGVja2luZyBvZiB0aGUgSUQvUkVGCgkgIHN0dWZmLCBiZXR0ZXIgc29sdXRpb24gZm9yICMxMDcyMDgKCSogeG1scmVnZXhwLmM6IHJlbW92ZWQgYSBkaXJlY3QgcHJpbnRmLCBkb2hoaAoJKiB4bWxyZWFkZXIuYzogZml4ZWQgYSBidWcgb24gc3RyZWFtaW5nIHZhbGlkYXRpb24gb2YgZW1wdHkgCgkgIGVsZW1lbnRzIGluIGVudGl0aWVzCgkqIHJlc3VsdC9WQy9FbGVtZW50VmFsaWQ4IHRlc3QvVkNNL3YyMC54bWwgcmVzdWx0L3ZhbGlkL3hodG1sMS54aHRtbDoKCSAgY2xlYW51cCBvZiB0aGUgdmFsaWRhdGlvbiB0ZXN0cwoJKiB0ZXN0L3ZhbGlkL2lkKiB0ZXN0L3ZhbGlkL2R0ZHMvZGVzdGZvby5lbnQgcmVzdWx0L3ZhbGlkL2lkKjoKCSAgYWRkZWQgbW9yZSBJRC9JRFJFRiB0ZXN0cyB0byB0aGUgc3VpdGUKClNhdCBNYXIgMjIgMjM6Mzg6MDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkICMxMDcwNDMgcmVtb3ZpbmcgMiB3YXJuaW5ncyB3aXRoIFN1biBPbmUKCSAgY29tcGlsZXIuCgpTYXQgTWFyIDIyIDE4OjUwOjQ1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogdmFsZ3JpbmQnZWQgYW5kIGNsZWFuZWQgdXAgYSBjb3VwbGUgb2YgbWVtb3J5IGlzc3Vlcy4KClNhdCBNYXIgMjIgMTY6MTU6NTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeCBidWcgIzEwNzIwOCBhdm9pZCBmYWxzZSBkdXBsaWNhdGVzIHdoZW4gSUQvUkVGcyBhcmUKCSAgZGVmaW5lZCBpbiBlbnRpdGllcyBjb250ZW50CgpTYXQgTWFyIDIyIDE1OjUzOjI3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBGaXhlZCB2YWxpZGF0aW9uIGJ1ZyAjMTA4ODU4IG9uIG5hbWVzcGFjZSBuYW1lcyB1c2luZwoJICBlbnRpdGllcyBhbmQgcmVwb3J0ZWQgYnkgQnJlbnQgSGVuZHJpY2tzCgkqIHhtbGxpbnQuYzogcmVwb3J0IHhtbFRleHRSZWFkZXJIYXNWYWx1ZSgpIHJlc3VsdCBpbiAtLXN0cmVhbQoJICAtLWRlYnVnIG91dHB1dC4KClNhdCBNYXIgMjIgMTM6MzI6MzkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmM6IGZpeGVkIGJ1ZyAjMTA4ODAxIHJlcG9ydGVkIGJ5IE1hbGNvbG0gVHJlZGlubmljawoJICBhYm91dCB0aGUgRG9jVHlwZSBub2RlIG5vdCBiZWluZyByZXBvcnRlZCBzb21ldGltZXMuCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGFkZGVkIHRvIHRlc3QgdG8gdGhlIHJlZ3Jlc3Npb24gY2hlY2tzCgpTYXQgTWFyIDIyIDAxOjU3OjQwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jOiBmaXhlZCBidWcgIzEwODU0NiBvbiBsb25nIENEQVRBIChvciB0ZXh0IG5vZGVzKQoJICByZXBvcnRlZCBieSBFZGQgRHVtYmlsbAoKU2F0IE1hciAyMyAwMTowMDoyNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IHBhdGNoIGZyb20KCSAgam9oYW5AZXZlbmh1aXMubmwgZm9yICMxMDc5MzcgZml4aW5nIHNvbWUgbGluZSBjb3VudGluZwoJICBwcm9ibGVtcywgYW5kIHNvbWUgb3RoZXIgY2xlYW51cHMuCgkqIHJlc3VsdC9IVE1MLzogdGhpcyByZXN1bHQgaW4gc29tZSBsaW5lIG51bWJlciBjaGFuZ2VzCgpGcmkgTWFyIDIxIDIyOjE5OjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogZml4ZWQgUmVkIEhhdCBidWcgIzg2MTE4IHVzZSBsaWJ4bWwyLnNwZWMKCSAgaW5zdGVhZCBvZiBsaWJ4bWwuc3BlYwoJKiByZWxheG5nLmM6IGZpeGVkIHNvbWUgb2YgdGhlIGVycm9yIHJlcG9ydGluZyBleGNlc3NpdmUKCSAgdmVyYm9zaXR5CgkqIGNhdGFsb2cuYyBkZWJ1Z1hNTC5jIHZhbGlkLmMgeG1scmVhZGVyLmMgeG1sc2NoZW1hcy5jIHhwYXRoLmMKCSAgeG1sc2NoZW1hc3R5cGVzLmM6IHJlbW92ZWQgc29tZSB3YXJuaW5ncyBmcm9tIGdjYwoJKiBkb2MvbGlieG1sMi1hcGkueG1sOiByZWJ1aWx0CgpGcmkgTWFyIDIxIDE3OjI1OjIzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogYW5vdGhlciBvcHRpbWl6YXRpb24sIGZvciBjaG9pY2UgdGhpcyB0aW1lCgkqIHJlc3VsdC9yZWxheG5nL3NwZWMxKiByZXN1bHQvcmVsYXhuZy90dXRvcjEyXzEqIAoJICByZXN1bHQvcmVsYXhuZy90dXRvcjNfNzogY2xlYW51cHMuCgpGcmkgTWFyIDIxIDEzOjQxOjIzIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgeG1sUmVsYXhOR05vZGVNYXRjaGVzTGlzdAoJKiB0ZXN0L3JlbGF4bmcvdGVzdHN1aXRlLnhtbDogYXVnbWVudGVkIHRoZSB0ZXN0IHN1aXRlCgkqIHJlc3VsdC9yZWxheG5nL3NwZWMxKiByZXN1bHQvcmVsYXhuZy90dXRvcjEyXzEqOiB0aGlzIGZpeGVzCgkgIHNvbWUgc2NoZW1hcyB2YWxpZGF0aW9uIHRlc3RzIGluIHRoZSBwcmVzZW5jZSBvZiBmb3JlaWduIAoJICBuYW1lc3BhY2VzLgoKRnJpIE1hciAyMSAwMjoyMzozNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGFkZGVkIGFub3RoZXIgaW50ZXJsZWF2ZSBzcGVlZHVwLgoKVGh1IE1hciAyMCAxNzoyMjowMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogYWRkZWQgaW50ZWdlciBhbmQgZml4ZWQgb25lIG9mIHRoZQoJICBJRFJFRlMgcmVncmVzc2lvbiB0ZXN0cyBwYm0KCSogcmVzdWx0L3JlbGF4bmcvZG9jYm9va18wLmVycjogdXBkYXRlZAoKV2VkIE1hciAxOSAyMTo1ODo0NyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIHhtbHNjaGVtYXN0eXBlcy5jOiBhdHRlbXB0IHRvIGNvcGUgd2l0aCBJRC9JRFJFRihTKQoJICBkZWNsYXJlZCBib3RoIGluIHRoZSBEVEQgYW5kIGluIHRoZSBTY2hlbWFzIDxncmluLz4KCSogcmVsYXhuZy5jOiBtb3JlIGRlYnVnLCBhZGRlZCBhIGJpZyBvcHRpbWl6YXRpb24gZm9yIDxtaXhlZD4KCSogdGVzdC9yZWxheG5nL3Rlc3RzdWl0ZS54bWw6IGF1Z21lbnRlZCB0aGUgdGVzdHN1aXRlCgkqIHRlc3QvcmVsYXhuZy8gcmVzdWx0L3JlbGF4bmc6IGFkZGVkIHRoZSBSZWxheE5HIHNwZWMgYW5kIGEgCgkgIERvY0Jvb2sgZXhhbXBsZSB0byB0aGUgcmVncmVzc2lvbiB0ZXN0cwoKV2VkIE1hciAxOSAxMTozNDoxMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHk6IGNvc21ldGljIGNoYW5nZSBmb3Igb3V0cHV0CgkqIHJlbGF4bmcuYzogdHJ5IHRvIG1pbmltaXplIGNhbGxzIHRvIG1hbGxvYy9mcmVlIGZvciBzdGF0ZXMuCgpUdWUgTWFyIDE4IDE3OjUwOjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogcmVtb3ZlZCBhIHdhcm5pbmcKCSogeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgY2xlYW51cCwgYWRkZWQgRU5USVRZIGFuZCBFTlRJVElFUwoJICBzdXBwb3J0CgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weSBjaGVjay14c2RkYXRhLXRlc3Qtc3VpdGUucHk6CgkgIGNsZWFudXAvaW1wcm92ZW1lbnRzIG9mIHRoZSByZWdyZXNzaW9uIHRlc3RzIGJhdGNoCgkqIHRlc3QvcmVsYXhuZy90ZXN0c3VpdGUueG1sOiBhdWdtZW50ZWQgbGlieG1sMiBvd24gdGVzdHN1aXRlCgpUdWUgTWFyIDE4IDEyOjM2OjIyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZml4ZWQgZXJyb3IgbXNnIGNsZWFudXAgZGVhbGxvY2F0aW9uCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhZGRlZCBhIGZ1bmN0aW9uIHRvIGhhbmRsZSBsaXN0cyBvZgoJICBhdG9taWMgdHlwZXMsIGFkZGVkIHN1cHBvcnQgZm9yIElEUkVGUwoKVHVlIE1hciAxOCAwMToyODoxNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgdmFsaWQuYyB4bWxzY2hlbWFzdHlwZXMuYzogYWRkZWQgRGF0YXR5cGUgSUQKCSAgYW5kIElEUkVGLCB1c2FibGUgZnJvbSBSZWxheE5HIG5vdwoJKiBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDogbmVlZCB0byBhZGQgYSBuZXcgaW50ZXJmYWNlCgkgIGJlY2F1c2UgdGhlIHZhbGlkYXRpb24gbW9kaWZpZXMgdGhlIGluZm9zZXQKCSogdGVzdC9yZWxheG5nL3Rlc3RzdWl0ZS54bWw6IGV4dGVuZGVkIHRoZSB0ZXN0c3VpdGUKCk1vbiBNYXIgMTcgMTY6MzQ6MDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCB0aGUgbGFzdCBjb3JlIFJlbGF4TkcgYnVnIGtub3duICMxMDcwODMsCgkgIHNoZW1hcyBkYXRhdHlwZSBJRC9JRFJFRiBzdXBwb3J0IHN0aWxsIG1pc3NpbmcgdGhvdWdoLgoJKiB4bWxyZWFkZXIuYzogZml4IGEgY3Jhc2hpbmcgYnVnIHdpdGggcHJlZml4IHJhaXNlZCBieQoJICBNZXJpam4gQnJvZXJlbgoJKiB0ZXN0L3JlbGF4bmcvdGVzdHN1aXRlLnhtbDogYXVnbWVudGVkIHRoZSB0ZXN0c3VpdGUgd2l0aAoJICBjb21wbGV4IGluaGVyaXRhbmNlIHRlc3RzCgpTdW4gTWFyIDE2IDE4OjQ1OjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogc3dpdGNoZWQgYmFjayB0byB0aGUgcHJldmlvdXMgUmVsYXgtTkcgY29kZSBiYXNlLAoJICB0aGUgZGVyaXZhdGlvbiBhbGdvcml0aG0gbmVlZCBzZXZlcmUgY29uc3RyYWluaW5nIGNvZGUgdG8gYXZvaWQKCSAgY29tYmluYXRvcmlhbCBleHBsb3Npb24uIEZpeGVkIHRoZSBwcm9ibGVtIHdpdGggU2ViYXN0aWFuIFJhaHR6CgkgIFRFSSBiYXNlZCBleGFtcGxlIGFuZCBvdGhlciBidWdzCgkqIHJlc3VsdC9yZWxheG5nLyplcnI6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCSogdGVzdC9yZWxheG5nL3Rlc3RzdWl0ZS54bWw6IHN0YXJ0ZWQgYSBuZXcgdGVzdCBzdWl0ZSAKClNhdCBNYXIgMTUgMjI6MjY6NDYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDogQWZ0ZXIgY29taW5nIHRvIHRoZSBjb25jbHVzaW9uCgkgIHRoYXQgdGhlIG9yaWdpbmFsIFJlbGF4TkcgdmFsaWRhdGlvbiBjb2RlIHdhcyB1bi1maXhlYWJsZSwgaXQgZ290CgkgIHJld3JpdHRlbiB0byB1c2UgdGhlIGRlcml2YXRpb24gYWxnb3JpdGhtIGZyb20gSmFtZXMgQ2xhcmsgYW5kCgkgIHJlZGVidWdnZWQgaXQgKG5lYXJseSkgZnJvbSBzY3JhdGNoOgoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAzNzIgc3VjY2VzcyAxIGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTI5IHN1Y2Nlc3MgMCBmYWlsdXJlcwoKVHVlIE1hciAxMSAxMjowODoyMyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYyBwYXJzZXIuYzogZml4IHNvbWUgcmVjdXJzaW9uIHByb2JsZW1zIGludHJvZHVjZWQgaW4gdGhlCgkgIGxhc3QgcmVsZWFzZS4KCSogcmVsYXhuZy5jOiBtb3JlIGRlYnVnZ2luZyBvZiB0aGUgUk5HIHZhbGlkYXRpb24gZW5naW5lLCBzdGlsbAoJICBwcm9ibGVtcyB0aG91Z2guCgpNb24gTWFyIDEwIDE0OjEwOjQ3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBzdG9wIGdlbmVyYXRpbmcgd3JvbmcgcmVzdWx0IGZpbGUgd2l0aCAqIGluIG5hbWUKCSogcmVsYXhuZy5jOiBmaXhpbmcgdGhlIGluY2x1ZGUgYnVnIHJhaXNlZCBieSBTZWJhc3RpYW4gUmFodHoKCSogcmVzdWx0L3JlbGF4bmcvZGVtbyogdGVzdC9yZWxheG5nL2RlbW86IGFkZGVkIHRoZSB0ZXN0cyBmcm9tCgkgIFNlYmFzdGlhbiByZXByb2R1Y2luZyB0aGUgcHJvYmxlbS4KClN1biBNYXIgIDkgMTg6MDI6MzEgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxsaW50LjE6IHJlZ2VuZXJhdGluZyBtYW4gcGFnZSBmcm9tIHhtbGxpbnQueG1sIHRvIHBpY2sKCSAgdXAgQWxla3NleSdzIGNoYW5nZQoKU3VuIE1hciAgOSAxMzo1MzoxNiAyMDAzICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHhtbGxpbnQuYyBkb2MveG1sbGludC54bWw6IHVzZSAkWE1MTElOVF9JTkRFTlQgZW52aXJvbm1lbnQKCXZhcmlhYmxlIHRvIGNvbnRyb2wgdGhlIGluZGVudGF0aW9uIGZvciB0aGUgeG1sbGludCAiLS1mb3JtYXQiIAoJb3B0aW9uCgpTYXQgTWFyICA4IDE0OjI3OjQzIENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHpsYXRrb3ZpYy5jb20+CgoJKiBlbmNvZGluZy5jOiBhcHBsaWVkIEdlbm5hZHkncyBwYXRjaCBhZ2FpbnN0IGJ1ZmZlciBvdmVycnVuCgpGcmkgTWFyICA3IDE5OjI5OjQwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3QveHNkdGVzdC94c2R0ZXN0LnhtbCB1cmkuYzogYWZ0ZXIgYW5kIGV4Y2hhbmdlIHdpdGggSmFtZXMKCSAgQ2xhcmsgaXQgYXBwZWFyZWQgSSBoYWQgYnVnIGluIFVSSSBwYXJzaW5nIGNvZGUgLi4uCgkqIHJlbGF4bmcuYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IGNvbXBsZXRlbHkgcmV2YW1wZWQgZXJyb3IKCSAgcmVwb3J0aW5nIHRvIG5vdCBsb29zZSBtZXNzYWdlIGZyb20gb3B0aW9uYWwgcGFydHMuCgkqIHhtbGxpbnQuYzogYWRkZWQgdGltaW5nIGZvciBSTkcgdmFsaWRhdGlvbiBzdGVwcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHQsIGFsbCBlcnJvciBtZXNzYWdlcyBjaGFuZ2VkCgpGcmkgTWFyICA3IDE1OjE4OjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeCBidWcgIzEwNzgwNCwgdGhlIGFsZ29yaXRobSB1c2VkIGZvciBkb2N1bWVudCBvcmRlcgoJICBjb21wdXRhdGlvbiB3YXMgZmFpbGluZyBvbiBhdHRyaWJ1dGVzLgoKVGh1IE1hciAgNiAyMjozNTo1MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXggYnVnICMxMDc3NjQgLCBwb3NzaWJpbGl0eSBvZiBidWZmZXIgb3ZlcmZsb3cKCSAgaW4geG1sVmFsaWREZWJ1ZygpCgpXZWQgTWFyICA1IDE3OjQxOjM3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYyBpbmNsdWRlL2xpYnhtbC9uYW5vZnRwLmg6IGFkZGluZyB4bWxOYW5vRlRQRGVsZSgpCgkgIGZyb20gUGhpbGlwcCBEdW5rZWwKCldlZCBNYXIgIDUgMTA6NTc6MDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGUuYzogbWFkZSBwb3d0ZW4gYXJyYXkgc3RhdGljIGl0IHNob3VsZCBub3QgYmUgZXhwb3J0ZWQKCSogSFRNTHBhcnNlci5jOiBmaXggYnVnICMxMDczNjEgYnkgcmV1c2luZyB0aGUgY29kZSBmcm9tIHRoZSBYTUwgCgkgIHBhcnNlciBmdW5jdGlvbi4KCSogdGVzdEhUTUwuYzogZ2V0IHJpZCBvZiB2YWxncmluZCBtZXNzYWdlcyBvbiB0aGUgSFRNTCBTQVggdGVzdHMKCkZyaSBGZWIgMjggMDA6MjM6MDAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIG5vZGUgZHVtcCBjcmFzaCBvbiBhdHRyaWJ1dGVzCgkqIHRlc3QveHNkdGVzdC94c2R0ZXN0LnhtbCB0ZXN0L3hzZHRlc3QveHNkdGVzdC54c2w6IGZpeGVkCgkgIGFuIFVSSSB0ZXN0IGJ1ZyBhbmQgZ2V0IGJldHRlciBvdXRwdXQuCgpUaHUgRmViIDI3IDIyOjI4OjQwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhzZGRhdGEtdGVzdC1zdWl0ZS5weTogZ2l2ZSBtb3JlIGluZm9zCgkqIHJlbGF4bmcuYzogZml4IGEgYnVnIHJlcG9ydGVkIGJ5IFNlYmFzdGlhbiBSYWh0eiBhbmQKCSAgUkVGLT5ERUYgaW4gYXR0cmlidXRlIHZhbHVlcy4KClRodSBGZWIgMjcgMjE6MDk6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steHNkZGF0YS10ZXN0LXN1aXRlLnB5IHRlc3QveHNkdGVzdC94c2R0ZXN0LnhtbAoJICB0ZXN0L3hzZHRlc3QveHNkdGVzdC54c2w6IGltcG9ydCBvZiB0aGUgWFNEIERhdGF0eXBlCgkgIHJlZ3Jlc3Npb24gdGVzdHMgZnJvbSBKYW1lcyBDbGFyay4KClRodSBGZWIgMjcgMTg6NDA6MDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYwoJICBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaDogYWRkZWQgcGFyYW0gc3VwcG9ydCBmb3IgcmVsYXhuZwoJICB0eXBlIGNoZWNraW5nLCBzdGFydGVkIHRvIGluY3JlbWVudCB0aGUgcG9vbCBvZiBzaW1wbGUgdHlwZXMKCSAgcmVnaXN0ZXJlZCwgc3RpbGwgbXVjaCB3b3JrIHRvIGJlIGRvbmUgb24gc2ltcGxlIHR5cGVzIGFuZAoJICBmYWNldHMgY2hlY2tpbmdzLgoKV2VkIEZlYiAyNiAxNjo0NTozOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBmaXhlcyBhZ2FpbiBvbmUgb2YgdGhlIHByb2JsZW0gcmFpc2VkIGJ5CgkgIEphbWVzIENsYXJrIGluICMxMDY3ODgKCldlZCBGZWIgMjYgMTU6NDY6NDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBGaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtIHJhaXNlZCBieSBKYW1lcyBDbGFyawoJICBpbiBidWcgIzEwNzA4MywgdGhlIHN1cHBvcnQgZm9yIElEL0lEUkVGL0lEUkVGUyBhdCB0aGUgV1hTCgkgIGRhdGF0eXBlIGxldmVsIHN0aWxsIG5vdCBmaXhlZCB0aG91Z2guCgpNb24gRmViIDI0IDIxOjA5OjE5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2UgMi41LjQKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogcmVsYXhuZy5jOiByZW1vdmVkIHdhcm5pbmdzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCk1vbiBGZWIgMjQgMjA6NTM6MTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZXMgYSBEVEQgcmVnZXhwIGdlbmVyYXRpb24gcHJvYmxlbS4KCk1vbiBGZWIgMjQgMjA6MTI6NTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGVzIGJ1ZyAjMTA1OTk4IGFib3V0IGZhbHNlIGRldGVjdGlvbiBvZgoJICBhdHRyaWJ1dGUgY29uc3VtcHRpb24gbG9vcC4KCk1vbiBGZWIgMjQgMTk6MTQ6NTcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogRml4ZXMgYnVnICMxMDY5MzEgaW4gWEluY2x1ZGUgZW50aXRpZXMgbWVyZ2luZy4KCk1vbiBGZWIgMjQgMTg6NTA6MzUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGVkIGJ1ZyAjMTA1OTkyCgpNb24gRmViIDI0IDE4OjE0OjE2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4ZWQgeG1sU2V0UHJvcCBhbmQgYWwuIHdoZW4gdGhlIG5vZGUgcGFzc2VkIGlzIG5vdCBhbgoJICBlbGVtZW50LgoJKiByZWxheG5nLmM6IGZpeGVkIGJ1Z3MgNy4zICh0aG91Z2ggbm90IGNvbXBsZXRlKSBhbmQgbWVtb3J5IGxlYWtzCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDM2OSBzdWNjZXNzIDQgZmFpbHVyZXMKCSAgZm91bmQgNTI5IHRlc3QgaW5zdGFuY2VzOiA1MjUgc3VjY2VzcyA0IGZhaWx1cmVzCgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weTogYWRkZWQgbWVtb3J5IGRlYnVnIHJlcG9ydGluZwoKTW9uIEZlYiAyNCAxMjo0MTo1NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYyBwYXJzZXIuYzogc29tZSB3YXJuaW5nIHJlbW92YWwgb24gSWdvcidzIHBhdGNoCgkqIHRyZWUuYzogc2VlbXMgSSBtZXNzZWQgdXAgd2l0aCAjMTA2Nzg4IGZpeAoJKiBweXRob24vbGlieG1sLmM6IGZpeGVkIHNvbWUgYmFzZSBwcm9ibGVtcyB3aGVuIFB5dGhvbiBwcm92aWRlcwoJICB0aGUgcmVzb2x2ZXIuCgkqIHJlbGF4bmcuYzogZml4ZWQgdGhlIGludGVybGVhdmUgYWxnb3JpdGhtIAoJICBmb3VuZCAzNzMgdGVzdCBzY2hlbWFzOiAzNjQgc3VjY2VzcyA5IGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTI1IHN1Y2Nlc3MgNCBmYWlsdXJlcwoJICB0aGUgcmVzdWx0aW5nIGZhaWx1cmVzIGFyZSBidWcgaW4gdGhlIGFsZ29yaXRobSBmcm9tIDcuMyBhbmQKCSAgbGFjayBvZiBzdXBwb3J0IGZvciBwYXJhbXMKClN1biBGZWIgMjMgMTQ6NDk6MzkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGFub3RoZXIgZml4IGZvciBub2RlaW5mbyBpbiBlbnRpdGllcyBwcm9ibGVtCgkqIHRyZWUuYyBlbnRpdGllcy5jOiBmaXhlZCBidWcgIzEwNjc4OCBmcm9tIEphbWVzIENsYXJrCgkgIHNvbWUgc3BhY2VzIG5lZWQgdG8gYmUgc2VyaWFsaXplZCBhcyBjaGFyYWN0ZXIgcmVmZXJlbmNlcy4KClNhdCBGZWIgMjIgMTg6Mjg6MTYgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHBhcnNlci5jIHVyaS5jOiBmaXhlZCB0aGUgYnVnIEkgaW50cm9kdWNlZCBpbiB0aGUgcGF0aAoJICBoYW5kbGluZywgcmVwb3J0ZWQgYnkgU2ViYXN0aWFuIEJlcmdtYW5uCgpTYXQgRmViIDIyIDAwOjE5OjQ4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgc29tZSBub2RlaW5mbyBpbiBlbnRpdGllcyBwcm9ibGVtIHJhaXNlZAoJICBieSBHbGVubiBXLiBCYWNoCgkqIHJlbGF4bmcuYzogaW1wbGVtZW50ZWQgdGhlIGZpcnN0IHNlY3Rpb24gNy4zIGNoZWNrCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCkZyaSBGZWIgMjEgMTg6MTI6MTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBmaXhlZCBzb21lIHByb2JsZW1zIGluIHRoZSBwcmV2aW91cyBjb21taXQKCSAgYW5kIGZpbmlzaGVkIGltcGxlbWVudGluZyA0LjE2IHJ1bGVzIGNoZWNraW5nCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDM1MyBzdWNjZXNzIDIwIGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTE5IHN1Y2Nlc3MgNiBmYWlsdXJlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpGcmkgRmViIDIxIDE2OjM3OjM5IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogaW1wbGVtZW50ZWQgY2hlY2tzIGZyb20gc2VjdGlvbiA3LjIKClRodSBGZWIgMjAgMTY6MDA6MzEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBpbXBsZW1lbnRlZCB0aGUgY2hlY2tzIGZyb20gc2VjdGlvbiA3LjEsIGZpeGVkCgkgIHNvbWUgb2YgdGhlIDQuMjAgYW5kIDQuMjEgcHJvYmxlbXMuCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDMzOCBzdWNjZXNzIDM1IGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTE5IHN1Y2Nlc3MgNiBmYWlsdXJlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpUaHUgRmViIDIwIDAxOjA5OjI0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogaW1wbGVtZW50ZWQgdGhlIDQuMjAgYW5kIDQuMjEgc2ltcGxpZmljYXRpb24gcnVsZXMuCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCldlZCBGZWIgMTkgMTg6MzA6MzAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIGJ1Z2ZpeGVzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCldlZCBGZWIgMTkgMTU6Mzk6NTYgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIERPQ0JwYXJzZXIuYzogb2Jzb2xldGVkIHhtbE5vcm1hbGl6ZVdpbmRvd3NQYXRoCgkqIEhUTUxwYXJzZXIuYzogb2Jzb2xldGVkIHhtbE5vcm1hbGl6ZVdpbmRvd3NQYXRoCgkqIFNBWC5jOiBlbnN1cmVkIHhtbERvYy5VUkwgaXMgYWx3YXlzIGNhbm9uaWMKCSogcGFyc2VyLmM6IG9ic29sZXRlZCB4bWxOb3JtYWxpemVXaW5kb3dzUGF0aAoJKiB1cmkuYyBpbmNsdWRlL2xpYnhtbC91cmkuaDogaW50cm9kdWNlZCB4bWxDYW5vbmljUGF0aAoJKiB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IG9ic29sZXRlZCB4bWxOb3JtYWxpemVXaW5kb3dzUGF0aAoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIGZldyBleHBvcnRzCgpXZWQgRmViIDE5IDE0OjI2OjUxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogcGF0Y2hlZCB0byBoYXZlIHNoYXJlZCBsaWJyYXJpZXMKCSAgZm9yIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzIGFuZCBzdGF0aWMgYmluYXJpZXMgZm9yIGdkYiBkZWJ1ZwoJICBpbiBteSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudAoJKiByZWxheG5nLmM6IG1vcmUgYnVnZml4ZXMgCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDI5NiBzdWNjZXNzIDc3IGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTE2IHN1Y2Nlc3MgOCBmYWlsdXJlcwoJKiByZXN1bHQvcmVsYXhuZy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzCgpXZWQgRmViIDE5IDAxOjE3OjQ4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogZ3Vlc3Mgd2hhdCAhIFJlbGF4LU5HIGJ1Z2ZpeGluZywgd2hhdCBhIHN1cnByaXplLi4uCgpUdWUgRmViIDE4IDIyOjA5OjUwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBmbG9hdC9kb3VibGUgY2hlY2sgYnVnZml4CgkqIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGV4cG9ydGVkIGEgZnVuY3Rpb24gZm9yIE5NVE9LRU4KCSAgdmFsaWRhdGlvbgoJKiB4bWxyZWFkZXIuYzogYWRkIGEgVE9ETyBmb3IgSm9keQoJKiByZWxheG5nLmM6IGJ1Z2ZpeCBidWdmaXggYnVnZml4CgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDMwMCBzdWNjZXNzIDczIGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNTA3IHN1Y2Nlc3MgMTAgZmFpbHVyZXMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKVHVlIEZlYiAxOCAwMDozMzoxNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmMgY2hlY2stcmVsYXhuZy10ZXN0LXN1aXRlLnB5OiBtb3JlIFJlbGF4TkcgYnVnIGh1bnRpbmcKCk1vbiBGZWIgMTcgMTg6MjM6MzIgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weTogbW9yZSB3b3JrIG9uIHRoZQoJICBSZWxheE5HIGltcGxlbWVudGF0aW9uIGNvbmZvcm1hbmNlIHRlc3RpbmcuCgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDI4NCBzdWNjZXNzIDg5IGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNDQ4IHN1Y2Nlc3MgNDcgZmFpbHVyZXMKCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKU3VuIEZlYiAxNiAxNjo0ODozOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBDaGFuZ2VMb2cgdHJlZS5jIGRvYy9saWJ4bWwtZG9jLmVsIGRvYy9saWJ4bWwyLWFwaS54bWw6IGFwcGxpZWQKCSAgYSBwYXRjaCBmcm9tIEtqYXJ0YW4gTWFyYWFzIHRvIGZpeCBzb21lIHR5cG9zCgpTdW4gRmViIDE2IDE2OjQwOjUyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSBidWctaHVudGluZwoJKiB0ZXN0UmVsYXguYyBpbmNsdWRlL2xpYnhtbC9yZWxheG5nLmg6IGFkZGVkIC0tdHJlZSB0byBkdW1wIHRoZQoJICBpbnRlcm1lZGlhdGUgcm5nIHRyZWUKCSogcHl0aG9uL2dlbmVyYXRvci5weTogcGF0Y2ggZnJvbSBTdGVwaGFuZSBCaWRvdWwgdG8gZml4IHRoZSBnZW5lcmF0b3IKCSAgb24gcHl0aG9uIDwgMi4yCgpGcmkgRmViIDE0IDE3OjQ5OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weSByZWxheG5nLmM6IG1vcmUgdGVzdGluZyBvbiB0aGUKCSAgUmVsYXgtTkcgZnJvbnQsIGNsZWFuaW5nIHVwIHRoZSByZWdyZXNzaW9uIHRlc3RzIGZhaWx1cmVzCgkgIGN1cnJlbnQgc3RhdGUgYW5kIEkgZm9yZ290IHN1cHBvcnQgZm9yICJtaXhlZCI6CgkgIGZvdW5kIDM3MyB0ZXN0IHNjaGVtYXM6IDI4MCBzdWNjZXNzIDkzIGZhaWx1cmVzCgkgIGZvdW5kIDUyOSB0ZXN0IGluc3RhbmNlczogNDAxIHN1Y2Nlc3MgNjggZmFpbHVyZXMKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB4bWxzY2hlbWFzdHlwZXMuYzogZmluaXNoZWQgYW5kCgkgIG1vdmVkIHRoZSBOYW1lLCBOQ05hbWUgYW5kIFFOYW1lIHZhbGlkYXRpb24gcm91dGluZSBpbiB0cmVlLmMKCSogdXJpLmM6IGZpeGVkIGhhbmRsaW5nIG9mIFVSSSBlbmRpbmcgdXAgd2l0aCAjLCBpLmUuIGhhdmluZwoJICBhbiBlbXB0eSBmcmFnbWVudCBJRC4KCSogcmVzdWx0L3JlbGF4bmcvKjogdXBkYXRlZCB0aGUgcmVzdWx0cwoKVGh1IEZlYiAxMyAxNjo0OToyNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14aW5jbHVkZS10ZXN0LXN1aXRlLnB5OiBpbXByb3ZlZCB0aGUgc2NyaXB0IGFjY29yZGluZ2x5CgkgIHRvIHRoZSBYSW5jbHVkZSByZWdyZXNzaW9uIHRlc3RzIHVwZGF0ZXMKCSogeHBvaW50ZXIuYzogSW1wbGVtZW50ZWQgWFBvaW50ZXIgZWxlbWVudCgpIFNjaGVtZSBXM0MgUFIgb2YgMTMKCSAgTm92ZW1iZXIgMjAwMgoJKiByZXN1bHQvWFBhdGgveHB0ci9jaGFwdGVyc2NoaWxkc2VxIHJlc3VsdC9YUGF0aC94cHRyL3ZpZGNoaWxkc2VxCgkgIHRlc3QvWFBhdGgveHB0ci9jaGFwdGVyc2NoaWxkc2VxIHRlc3QvWFBhdGgveHB0ci92aWRjaGlsZHNlcToKCSAgYXVnbWVudGVkIHRoZSBYcG9pbnRlciB0ZXN0c3VpdGUgZm9yIHRoZSBlbGVtZW50KCkgc2NoZW1lCgpUaHUgRmViIDEzIDEyOjAwOjMwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogYWRkZWQgVE9ETyBmb3IgdGhlIERURCBjb21wYXRpYmlsaXR5IHNwZWMKCSogeGluY2x1ZGUuYzogbW9yZSBidWcgZml4ZXMgZHJpdmVuIGJ5IHRoZSB0ZXN0c3VpdGUgCgpUdWUgRmViIDExIDE5OjAxOjAyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhpbmNsdWRlLXRlc3Qtc3VpdGUucHkgeGluY2x1ZGUuYzogV29yayBvbiB0aGUgVzNDL05JU1QKCSAgcmVncmVzc2lvbiB0ZXN0cyBmb3IgWEluY2x1ZGUsIGltcHJvdmVkIHRoZSBzY3JpcHQsIGltcHJvdmluZwoJICBYSW5jbHVkZSBlcnJvciByZXBvcnRpbmcgbWVjaGFuaXNtCgpNb24gRmViIDEwIDE3OjE5OjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1MgZG9jLyogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgcmVsZWFzZSAyLjUuMwoKTW9uIEZlYiAxMCAxNzoxMToyMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHRyeWluZyB0byBmaXggIzEwNDkzNCBhYm91dCBzb21lIFhIVE1MMSBzZXJpYWxpemF0aW9uCgkgIGlzc3Vlcy4KCk1vbiBGZWIgMTAgMTY6NDE6MTMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW5jb2RpbmcuYyB4bWxJTy5jOiBmaXhpbmcgYnVnICMxMDQ2NDYgYWJvdXQgaWNvbnYgYmFzZWQKCSAgZW5jb2RpbmcgY29udmVyc2lvbiB3aGVuIHRoZSBpbnB1dCBidWZmZXIgc3RvcHMgaW4gdGhlCgkgIG1pZGRsZSBvZiBhIG11bHRpYnl0ZSBjaGFyCgpNb24gRmViIDEwIDE1OjI0OjQ3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3QvcmVsYXhuZy9PQVNJUy9zcGVjdGVzdC54bWw6IE9BU0lTIFJlbGF4TkcgdGVzdHN1aXRlCgkqIGNoZWNrLXJlbGF4bmctdGVzdC1zdWl0ZS5weTogcHl0aG9uIHNjcmlwdCB0byBydW4gcmVncmVzc2lvbgoJICBhZ2FpbnN0IE9BU0lTIFJlbGF4TkcgdGVzdHN1aXRlCgkqIHJlbGF4bmcuYzogc29tZSBjbGVhbnVwIHR3ZWFrcwoJKiBIVE1McGFyc2VyLmMgZ2xvYmFscy5jOiBjbGVhbnVwcyBpbiBjb21tZW50cwoJKiBkb2MvbGlieG1sMi1hcGkueG1sOiB1cGRhdGVkIHRoZSBBUEkKCSogcmVzdWx0L3JlbGF4bmcvKjogZXJyb3JzIG1vdmVkIGZpbGVzLCBzbyBsYXJnZSBkaWZmcyBidXQKCSAgbm8gY2hhbmdlcyBhdCB0aGUgc2VtYW50aWMgbGV2ZWwuCgpNb24gRmViIDEwIDAxOjAwOjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4aW5nICMxMDU2NzggcHJvYmxlbSB3aGVuIGR1bXBpbmcgYSBuYW1lc3BhY2Ugbm9kZS4KCk1vbiBGZWIgMTAgMDA6MzA6MDEgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgZG9jIGNvbW1lbnQgcHJvYmxlbXMKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzogYWRkaW5nCgkgIFJlbGF4Tkcgd3JhcHBlcnMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWxheG5nLnB5OiBhZGRlZCBhIHNwZWNpZmljCgkgIHRlc3Qgb2YgdGhvc2UgZWFybHkgUHl0aG9uIFJlbGF4TkcgYmluZGluZ3MKClN1biBGZWIgIDkgMTU6MTg6NDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW46IGZpeGVzIGEgbGlidG9vbCBwcm9ibGVtIG9uIEFNRCA2NGJpdHMgYnVpbGRzCgkqIHJlbGF4bmcuYzogZm91bmQgdGhlIHZhbGlkYXRpb24gcHJvYmxlbSBJIGhhZCB3aXRoIGludGVybGVhdmUKCSAgd2hlbiBub3QgY292ZXJpbmcgYWxsIHJlbWFpbmluZyBzaWJsaW5ncwoJKiBNYWtlZmlsZS5hbSB0ZXN0LnJlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQgdGhlCgkgIHRlc3RzdWl0ZSBhbmQgY2hlY2sgdGhlIFJORyBzY2hlbWFzIGFnYWluc3QgdGhlIFJORyBzY2hlbWFzCgkgIGdpdmVuIGluIGFwcGVuZGl4IEEKClNhdCBGZWIgIDggMTg6NTU6NDMgQ0VUIDIwMDMgSWdvciBabGF0a292aWMgPGlnb3JAemxhdGtvdmljLmNvbT4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IHVwZGF0ZXMgZm9yIFJlbGF4TkcKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IHVwZGF0ZXMgZm9yIFJlbGF4TkcKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBSZWxheE5HIGV4cG9ydHMKCkZyaSBGZWIgIDcgMTQ6MDA6NTMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogYXBwbGllZCBhbm90aGVyIGJ1ZyBmaXggZnJvbSBTZWFuIENoaXR0ZW5kZW4KCkZyaSBGZWIgIDcgMTM6MzQ6MDggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHhtbGxpbnQuYzogSSBmLi4uZWQgdXAgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbgoJICBvZiBzY2hlbWFzIGFuZCAtLXJlbGF4bmcgb3B0aW9uIGRpc3BsYXkgaW4geG1sbGludCwgcG9pbnRlZCBieQoJICBNb3J1cyBXYWx0ZXIuCgkqIHhsaW5rLmM6IFNlYW4gQ2hpdHRlbmRlbiBwb2ludGVkIGEgY291cGxlIG9mIGVycm9ycyBpbiB0aGUgWExpbmsKCSAgZGV0ZWN0aW9uIG1vZHVsZSwgZml4ZXMgYnVnICMxMDUzNzQuCgpGcmkgRmViICA3IDAxOjQzOjM4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBhZGRlZCB0aGUgYm9vbGVhbiBiYXNlIHR5cGUuCgpUaHUgRmViICA2IDEwOjIzOjUyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBzdGFydGVkIGltcGxlbWVudGluZyBzb21lIG9mIHRoZSBtaXNzaW5nCgkgIGRlZmF1bHQgc2ltcGxlIHR5cGVzCgkqIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgdGhlIHJlc3VsdHMKCldlZCBGZWIgIDUgMTU6Mjg6MDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBkb2MvKjogdXBkYXRlZCB0aGUgZG9jcywgcmVhZHkgZm9yIDIuNS4yIHJlbGVhc2UKCldlZCBGZWIgIDUgMTQ6MTU6NTkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHRyZWUuYyB4bWxJTy5jOiBjb21tZW50cyBjbGVhbnVwcwoJKiBNYWtlZmlsZS5hbTogdXNlIHhtbGxpbnQgZm9yIGRvaW5nIHRoZSBSZWxheE5HIHRlc3RzCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNS4yIG1hZGUgc2NoZW1hcyBzdXBwb3J0IGRlZmF1bHQgdG8KCSAgb24gaW5zdGVhZCBvZiBvZmYKCSogcmVsYXhuZy5jOiByZW1vdmVkIHRoZSB2ZXJib3NpdHkKCSogeG1sbGludC5jOiBhZGRlZCAtLXJlbGF4bmcgb3B0aW9uCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbF93cmFwLmg6IHByZXBhcmVkIHRoZSBpbnRlZ3JhdGlvbgoJICBvZiB0aGUgbmV3IFJlbGF4TkcgbW9kdWxlIGFuZCBzY2hlbWFzCgkqIHJlc3VsdC9yZWxheG5nLyo6IGxlc3MgdmVyYm9zZSBvdXRwdXQKCldlZCBGZWIgIDUgMTI6MDA6MzYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZG8gbm90IHJ1biBjb250ZW50IG1vZGVsIHZhbGlkYXRpb24gaWYgdGhlCgkgIGNvbnRlbnQgaXMgbm90IGRldGVybWluaXN0CgpXZWQgRmViICA1IDExOjQzOjU4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBhZGRlZCB0aGUgcmVkZWZpbml0aW9uIG9mIG5hbWVzcGFjZWQgYXR0cmlidXRlCgkgIGNoZWNrIHRoYXQgd2FzIG1pc3NpbmcgYXMgRmFicmljZSBEZXNy6SBwb2ludGVkIG91dC4KCldlZCBGZWIgIDUgMTE6MDk6MjkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL0hUTUxwYXJzZXIuaDogYXBwbGllZCBIVE1MCgkgIGltcHJvdmVtZW50cyBmcm9tIE5pY2sgS2V3LCBhbGxvd2luZyB0byBkbyBtb3JlIGNoZWNraW5nCgkgIHRvIEhUTUwgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuCgpUdWUgRmViICA0IDIzOjQ3OjA2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZpeGluZyBidWcgIzEwNTEzNyBhYm91dCBlbnRpdGllcyBkZWNsYXJhdGlvbgoJICBuZWVkaW5nIHRvIGJlIGNvcGllZCB0byB0aGUgaW5jbHVkaW5nIGRvY3VtZW50LgoKVHVlIEZlYiAgNCAyMDoyNjoyMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGZpeGVkIGJ1ZyAjMTA0ODE3IHdpdGggZGVsZWdhdGVVUkkKCSogeHBhdGguYzogZml4aW5nIGJ1Z3MgIzEwNDEyMyBhbmQgIzEwNDEyNQoKVHVlIEZlYiAgNCAxNzoxMjo1NiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gdmFsaWQuYyB4bWxyZWFkZXIuYyBweXRob24vbGlieG1sX3dyYXAuaCAKCSAgcHl0aG9uL3R5cGVzLmM6IGZpeGluZyAjMTA0MDk2IHRvIGNvbXBpbGUgd2l0aG91dCByZWdleHBzCgpUdWUgRmViICA0IDE2OjMxOjU1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGluZyBidWcgIzEwMzk2OSBmb3Jnb3QgdG8gYWRkIGFuIGVwc2lsb24gdHJhbnNpdGlvbgoJICB3aGVuIGJ1aWxkaW5nIHRoZSBhdXRvbWF0YSBmb3IgZWxlbSoKClR1ZSBGZWIgIDQgMTY6MjE6MDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQXJuZSBkZSBCcnVpam4gZml4aW5nIAoJICBidWcgIzEwMzgyNwoKVHVlIEZlYiAgNCAxNjoxNzowOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHVwZGF0aW5nIGEgY29tbWVudCwgZml4aW5nICMxMDM3NzYKClR1ZSBGZWIgIDQgMTY6MDU6NTMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IGZpeGluZyBidWcgMTA1MDQ5IGZvciB2YWxpZGl0eSBjaGVja2luZyBvZiBjb250ZW50CgkgIHdpdGhpbiByZWN1cnNpdmUgZW50aXRpZXMuCgpUdWUgRmViICA0IDE1OjQwOjU0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogdHJ5IHRvIGZpeCAjIDEwNTA0OQoJKiByZWxheG5nLmMgeG1sc2NoZW1hc3R5cGVzLmM6IGEgY291cGxlIG9mIGNoYW5nZXMgYW5kIGV4dGVuc2lvbnMKCSogdHJlZS5jOiB1cGRhdGVkIGEgZnVuY3Rpb24gY29tbWVudAoKVHVlIEZlYiAgNCAwMDoyMDo1OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nOiBtb3JlIHdvcmsgb24gZ3JhbW1hcnMgYW5kIHJlZnMvZGVmcwoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUKCSAgcmVncmVzc2lvbiB0ZXN0cwoKTW9uIEZlYiAgMyAxNDoxNjo1OSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nOiBtb3JlIHdvcmsgb24gbmFtZSBjbGFzc2VzLCBleGNlcHQgc3VwcG9ydAoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUKCSAgcmVncmVzc2lvbiB0ZXN0cwoKTW9uIEZlYiAgMyAxMTo1NjowNSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nOiBtb3JlIHdvcmsgb24gbmFtZSBjbGFzc2VzLCB0aGUgInZhbGlkYXRlIGFsbCIgc2NoZW1hcwoJICBzZWVtcyB0byB3b3JrIG5vdy4KCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCk1vbiBGZWIgIDMgMDk6NTA6MjYgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jOiByZW1vdmVkIGFuIHVucHJvdGVkdGVkIGRlYnVnIG1lc3NhZ2UgQWxla3NpIFN1aG9uZW4KCSogcGFyc2VyLmM6IHB1dCBhIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZG9jdW1lbnQgZGVwdGgsIGJhc2ljYWxseQoJICB0cnlpbmcgdG8gYXZvaWQgYW5vdGhlciBraW5kIG9mIERvUyBhdHRhY2suCgkqIHJlbGF4bmcuYzogc29tZSBjb2RlIHcuci50LiBuYW1lQ2xhc3NlcwoKU3VuIEZlYiAgMiAxNzowMTo0MyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBjaGVjayBhbGwgdGhlIG5hbWVzcGFjZSBzdXBwb3J0CgkgIHdhcyBhY3R1YWxseSBjb3JyZWN0IGJhc2VkIG9uIHR1dG9yaWFsIHNlY3Rpb24gMTAuCgpTdW4gRmViICAyIDE1OjMzOjM4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmc6IGluY2x1ZGUgc2VlbXMgdG8gd29yayBva2F5IG5vdwoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUKCSAgcmVncmVzc2lvbiB0ZXN0cwoKU2F0IEZlYiAgMSAxOTo0NDo1OCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IGEgYml0IG9mIHdvcmsgZG9uZSBpbiB0aGUgdHJhaW4gYmFjay4KCSogdGVzdC9yZWxheG5nLyo6IGFkZGVkIG9uZSBvZiB0aGUgaW5jbHVkZSB0ZXN0cwoKVGh1IEphbiAzMCAxNDowNjo1NSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nOiBtb3JlIHdvcmsgZG9uZSBpbiB0aGUgdHJhaW4KCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCldlZCBKYW4gMjkgMjM6NDQ6NTggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBkZWJ1Z2dpbmcgb2YgZXh0ZXJuYWxSZWYKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCldlZCBKYW4gMjkgMjI6MDY6MDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcsIGltcGxlbWVudGluZyBleHRlcm5hbFJlZgoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUgCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCSogTWFrZWZpbGUuYW06IGNsZWFudXAgdG8gUmVsYXh0ZXN0cyB0YXJnZXQKCldlZCBKYW4gMjkgMDA6MDg6MzggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcsIGltcGxlbWVudGluZyBpbnRlcmxlYXZlCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZSAKCSAgcmVncmVzc2lvbiB0ZXN0cwoKVHVlIEphbiAyOCAyMTo1Njo0OSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBSZWxheC1ORywgaW1wbGVtZW50aW5nIGludGVybGVhdmUKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgpNb24gSmFuIDI3IDA3OjM1OjI5IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwvY3VzdG9tZm8ueHNsCgkqIGRvYy90dXRvcmlhbC9jdXN0b21odG1sLnhzbAoJYWRkaW5nIHN0eWxlc2hlZXQgY3VzdG9taXphdGlvbnMgdXNlZCB0byBnZW5lcmF0ZSBmbwoJZm9yIHBkZiBhbmQgaHRtbAoKTW9uIEphbiAyNyAxMzoyOTo0MyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBSZWxheC1ORwoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUgCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFkZGVkIGEgbnVtYmVyIG9mIGJhc2UgdHlwZSBkZWZpbml0aW9uIGJ1dCBub3QKCSAgdGhlIGFzc29jaWF0ZWQgY2hlY2tzLCB0aG9zZSBhcmUgc3RpbGwgVE9ET3MKClN1biBKYW4gMjYgMTc6Mzc6MDYgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCglpbiBkb2NzL3R1dG9yaWFsOgoJKiBhcGEuaHRtbAoJKiBhcGIuaHRtbAoJKiBhcGMuaHRtbAoJKiBhcGQuaHRtbAoJKiBhcGUuaHRtbAoJKiBhcGYuaHRtbAoJKiBhcGcuaHRtbAoJKiBhcjAxczAyLmh0bWwKCSogYXIwMXMwMy5odG1sCgkqIGFyMDFzMDQuaHRtbAoJKiBhcjAxczA1Lmh0bWwKCSogYXIwMXMwNi5odG1sCgkqIGFyMDFzMDcuaHRtbAoJKiBhcjAxczA4Lmh0bWwKCSogaW5kZXguaHRtbAoJKiB4bWx0dXRvcmlhbC5wZGYKCSogeG1sdHV0b3JpYWwueG1sCglhZGQgaW5kZXggdG8gdHV0b3JpYWwKClN1biBKYW4gMjYgMTc6MDI6MjkgTVNUIDIwMDMgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nLjEKCSogZG9jL3htbGNhdGFsb2dfbWFuLmh0bWwKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbAoJYmVsYXRlZGx5IGZpeGluZyBidWcgIzkzNjIyIChhZGRzIHJld3JpdGVVUkkgdHlwZSB0bwoJIi0tYWRkIiBvcHRpb24gaW4geG1sY2F0YWxvZyBtYW4gcGFnZQoKU3VuIEphbiAyNiAyMDo0NzoyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxjYXRhbG9nLmMgeG1sbGludC5jOiBhcHBsaWVkIHBhdGNoIGZvciBOZXRCU0QgYnkKCSAgSnVsaW8gTWVyaW5vLCBjbG9zaW5nICMxMDQ0NzUKClN1biBKYW4gMjYgMjA6Mzg6NDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcKCSogdGVzdC9yZWxheG5nLyogcmVzdWx0L3JlbGF4bmcvKjogYXVnbWVudGVkL3VwZGF0ZWQgdGhlIAoJICByZWdyZXNzaW9uIHRlc3RzCgpTdW4gSmFuIDI2IDAxOjQ5OjU4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHJlbGF4bmcuYzogbW9yZSB3b3JrIG9uIFJlbGF4LU5HCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGF1Z21lbnRlZC91cGRhdGVkIHRoZSAKCSAgcmVncmVzc2lvbiB0ZXN0cwoKU2F0IEphbiAyNSAxODo1OTo1NCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBSRUFETUU6IHVwZGF0ZWQgdGhlIHBvbGljeSBvbiBwcml2YXRlIG1haWwgYW5zd2VycwoJKiByZWxheG5nLmM6IG1vcmUgd29yayBvbiBSZWxheC1ORwoJKiB0ZXN0L3JlbGF4bmcvKiByZXN1bHQvcmVsYXhuZy8qOiBhdWdtZW50ZWQvdXBkYXRlZCB0aGUgCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCkZyaSBKYW4gMjQgMTU6MTI6NDQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYyBwYXJzZXIuYyB0cmVlLmM6IGFwcGxpZWQgYSBkb2N1bWVudGF0aW9uIHBhdGNoIGZyb20KCSAgU3RlZmFuIEtvc3QKCkZyaSBKYW4gMjQgMDI6MDA6NTAgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVsYXhuZy5jOiBtb3JlIHdvcmsgb24gUmVsYXgtTkcKCSogZG9jLyo6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IHVwZGF0ZWQgYW5kIGF1Z21lbnRlZCB0aGUKCSAgUmVsYXgtTkcgcmVncmVzc2lvbiB0ZXN0cyBhbmQgcmVzdWx0cwoKVGh1IEphbiAyMyAxOToyNjoyMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gcmVsYXhuZy5jIGluY2x1ZGUvbGlieG1sL3JlbGF4bmcuaDoKCSAgRmlyc3QgY29tbWl0IG9mIHRoZSBuZXcgUmVsYXgtTkcgdmFsaWRhdGlvbiBjb2RlLCBub3QgZ2VuZXJhbGx5CgkgIHVzZWZ1bCB5ZXQuCgkqIHRlc3QvcmVsYXhuZy8qIHJlc3VsdC9yZWxheG5nLyo6IGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlZ3Jlc3Npb24KCSAgdGVzdHMKClRodSBKYW4gMjMgMTk6MjI6NTQgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBtaW5pbWl6ZWQgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIEdldENvbnRlbnQKCSAgYW5kIGEgYml0IG9mIGNsZWFudXAuCgpUaHUgSmFuIDIzIDE3OjQxOjM3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IHNlZW1zIHRoZXJlIGlzIG5vIGdvb2QgcmVhc29ucyB0bwoJICBub3QgZ2VuZXJhdGUgYmluZGluZ3MgZm9yIFhQb2ludGVyCgpUdWUgSmFuIDIxIDEzOjE5OjM1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGRvYy9hcGlidWlsZC5weTogYXBwbGllZCBhIG5ldyBwYXRjaCBmcm9tCgkgIFN06XBoYW5lIEJpZG91bCBmb3IgY2xlYW51cHMKCSogZG9jL2xpYnhtbDItYXBpLnhtbDogcmVidWlsdCB0aGUgQVBJIGRlc2NyaXB0aW9uIHdpdGgKCSAgbmV3IGVudHJ5IHBvaW50cwoKTW9uIEphbiAyMCAyMzoyNTowMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vZHJ2X2xpYnhtbDIucHkgcHl0aG9uL2dlbmVyYXRvci5weQoJICBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weSBweXRob24vbGlieG1sX3dyYXAuaAoJICBweXRob24vdHlwZXMuYzogcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgZm9yIGJldHRlciBwZXIKCSAgY29udGV4dCBlcnJvciBtZXNzYWdlIEFQSXMKCSogcHl0aG9uL3Rlc3RzL2N0eHRlcnJvci5weSBweXRob24vdGVzdHMvcmVhZGVyZXJyLnB5OgoJICB1cGRhdGUgb2YgdGhlIHRlc3RzCgpTdW4gSmFuIDE5IDE3OjA5OjI4IE1TVCAyMDAzIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvZ3VpZGVsaW5lcy5odG1sCglncmFtbWFyIGFuZCBzcGVsbGluZyBjbGVhbnVwCgpGcmkgSmFuIDE3IDAwOjMxOjMwIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIHB5dGhvbi9nZW5lcmF0b3IucHkKCSAgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkgd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhcHBsaWVkCgkgIGEgcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgdG8gYWxsb3cgcGVyIFhNTHRleHRSZWFkZXIgZXJyb3IKCSAgYW5kIHdhcm5pbmcgaGFuZGxpbmcKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXJlcnIucHk6IGFkZGluZyB0aGUKCSAgc3BlY2lmaWMgcmVncmVzc2lvbiB0ZXN0CgpUdWUgSmFuIDE0IDE3OjAwOjA4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IEFsZXhleSBFZmltb3YgcG9pbnRlZCBvdXQgdGhhdCBjb25jYXQoJ2EnLCAnYicsICkKCSAgc2hvdWxkIHJhaXNlIGEgc3ludGF4IGVycm9yCgpUdWUgSmFuIDE0IDE1OjM5OjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9saWJ4bWwuYzogY2xlYW51cCBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bAoKVHVlIEphbiAxNCAxNDo0MToxOCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jOiBmaXhpbmcgYnVnICMxMDMxMDAgd2l0aCBhIGR1bW15IFVURjhUb1VURjggY29weQoKVHVlIEphbiAxNCAxMjo0MDoyOSBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5CgkgIHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOiBhcHBsaWVkIGFuZCBmaXhlZCBhIHBhdGNoCgkgIGZyb20gU3TpcGhhbmUgQmlkb3VsIHRvIHByb3ZpZGUgcGVyIHBhcnNlciBlcnJvciBoYW5kbGVycyBhdCB0aGUKCSAgUHl0aG9uIGxldmVsLgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2N0eHRlcnJvci5weTogYWRkZWQgYQoJICByZWdyZXNzaW9uIHRlc3QgZm9yIGl0LgoKVHVlIEphbiAxNCAwMToxNTowNCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogZml4ZWQgdGhlIHN0cmVhbWluZyBwcm9wZXJ0eSBvZiB0aGUgcmVhZGVyLAoJICBpdCB3YXMgZ2VuZXJhdGluZyB0cmVlIGZhc3RlciB0aGFuIGNvbnN1bWluZyBpdC4gUG9pbnRlZCBvdXQKCSAgYnkgTmF0ZSBNeWVycwoJKiB0cmVlLmM6IGZpeGVkIGEgYnVnIGluIHhtbFNhdmVGb3JtYXRGaWxlRW5jIGlmIHBhc3NlZCBhIE5VTEwgZG9jCgpTdW4gSmFuIDEyIDIyOjE4OjAyIENFVCAyMDAzIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBtb3JlIHhtbHJlYWRlciBhbmQgb3RoZXIgZXhwb3J0cwoKRnJpIEphbiAxMCAxODowNDozMiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXggdG8gdGhlIFhQYXRoIGltcGxlbWVudGF0aW9uIGZvciBwYXJlbnQgYW5kCgkgIGFuY2VzdG9ycyBheGlzIHdoZW4gb3BlcmF0aW5nIG9uIGEgUmVzdWx0IFZhbHVlIFRyZWUuCgkgIEZpeGVzIGJ1ZyAjMTAwMjcxCgpGcmkgSmFuIDEwIDE3OjA3OjAxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhtbElPLmM6IHBhdGNoIGZyb20gU3RlZmFubyBaYWNjaGlyb2xpCgkgIHRvIGZpeCBzb21lIFVSSS9maWxlIGVzY2FwaW5nIHByb2JsZW1zCgpGcmkgSmFuIDEwIDE2OjIwOjM0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGZpeGVkIGEgYnVnIHJhaXNlZCBieSBSYXltb25kIFdpa2VyLCAKCSAgZG9jU2V0Um9vdEVsZW1lbnQoKSBzaG91bGQgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUKCSAgcmV0dXJuIGlzIE5vbmUKCkZyaSBKYW4gMTAgMTQ6MTM6MDMgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWw6CgkgIGZpeGVkIGJ1ZyAjMTAyMTgxIGJ5IGFwcGx5aW5nIHRoZSBzdWdnZXN0ZWQgY2hhbmdlIGFuZCBmaXhpbmcKCSAgdGhlIGdlbmVyYXRpb24vcmVnaXN0cmF0aW9uIHByb2JsZW0uCgpGcmkgSmFuIDEwIDEzOjQ3OjU1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYnVnICMxMDI5NjAgYnkgcmV1c2luZyB0aGUgWE1MIG5hbWUgcGFyc2luZwoJICByb3V0aW5lcy4KCkZyaSBKYW4gMTAgMDA6MTY6NDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IG9uZSBtb3JlIElzRW1wdHlFbGVtZW50IGNyYXp5bmVzcywgdGhhdCB0aW1lIGluCgkgIGV4dGVybmFsIHBhcnNlZCBlbnRpdGllcyBpZiBzdWJzdGl0dXRpb24gaXMgYXNrZWQuCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXIzLnB5OiBhZGRlZCBhIHNwZWNpZmljIHRlc3QuCgpUaHUgSmFuICA5IDIyOjM1OjMxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9kcnZfbGlieG1sMi5weTogdXBkYXRlIGZyb20gU3TpcGhhbmUgQmlkb3VsOiBweXRob24gMi4xCgkgIHN1cHBvcnQgYW5kIGltcHJvdmVkIGVycm9yIGhhbmRsZXIgcmVnaXN0cmF0aW9uCgpUaHUgSmFuICA5IDE0OjE2OjM4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgdHJlZS5jOiBmaXhlcyAjMTAyOTIwIGFib3V0IG5hbWVzcGFjZSBoYW5kbGluZyBpbgoJICBIVE1MIG91dHB1dCBhbmQgc2VjdGlvbiAxNi4yICJIVE1MIE91dHB1dCBNZXRob2QiIG9mIFhTTFQtMS4wCgkqIFJFQURNRTogZml4ZWQgYSBsaW5rCgpXZWQgSmFuICA4IDE4OjMyOjI1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBkb2MvKiBORVdTOiBwcmVwYXJpbmcgMi41LjEgcmVsZWFzZQoJKiBTQVguYyBwYXJzZXIuYzogZml4aW5nIFhtbFRleHRSZWFkZXIgYnVnCgpXZWQgSmFuICA4IDAwOjEzOjAxIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBmdWNrLCBJIGludHJvZHVjZWQgYSBtZW1vcnkgbGVhayBvbiBleHRlcm5hbCBwYXJzZWQKCSAgZW50aXRpZXMgaW4gMi41LjAgOi0oCgpUdWUgSmFuICA3IDEyOjEyOjQ1IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYW5vdGhlciBmaXggbmVlZGVkIGFzIHBvaW50ZWQgYnkgQ2hyaXN0b3BoZSBNZXJsZXQKCSAgZm9yIC0tc3RyZWFtIC0tZGVidWcgaWYgY29tcGlsZWQgd2l0aG91dCBkZWJ1ZyBzdXBwb3J0LgoKTW9uIEphbiAgNiAyMDo1MzowOCBNU1QgMjAwMyBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGxpbnQueG1sCgkqIGRvYy94bWxsaW50LjE6Cgl1cGRhdGUgbWFuIHBhZ2Ugd2l0aCAtLXN0cmVhbSBhbmQgLS1jaGtyZWdpc3RlcgoKVHVlIEphbiAgNyAwMToxNzoyNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmM6IGZpeGVkIC0td2l0aC10aHJlYWRzIGNvbXBpbGUKCSogeG1sbGludC5jOiBmaXhlZCAtLXdpdGhvdXQtZGVidWcgY29tcGlsZQoJKiBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmg6IGNsZWFudXAKCSogaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOiBhZGQgYSBtaXNzaW5nIGluY2x1ZGUKCk1vbiBKYW4gIDYgMTQ6MDY6MDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIE5FV1M6IHByZXBhcmluZyAyLjUuMCByZWxlYXNlCgkqIFNBWC5jOiBvbmx5IHdhcm4gaW4gcGVkYW50aWMgbW9kZSBhYm91dCBuYW1lc3BhY2UgbmFtZSAKCSAgYnJva2VuZXNzCgkqIGdsb2JhbHMuYzogZml4IGEgZG9jIGdlbmVyYXRpb24gcHJvYmxlbQoJKiB1cmkuYzogZml4ICMxMDE1MjAKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvYyBmb3IgdGhlIHJlbGVhc2UsIGluY2x1ZHVkaW5nCgkgIHN0eWxlc2hlZXQgdXBkYXRlCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogZml4IGEgZmlsZW5hbWUgYnVnCgpNb24gSmFuICA2IDEyOjA1OjEyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy90dXRvcmlhbC8qIDogZml4ZWQgIzEwMTg5NCBpZiBkb2MgPT0gTlVMTCB4bWxGcmVlRG9jIAoJICBzaG91bGQgbm90IGJlIGNhbGxlZC4KCk1vbiBKYW4gIDYgMTE6NTk6MDkgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLTIuMC5wYy5pbjogYXBwbGllZCB0aGUgcGF0Y2ggdG8gZml4ICMxMDE4OTQKClN1biBKYW4gIDUgMjM6MzU6NDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIDogYXBwbGllZCBwYXRjaCBmcm9tIEx1a2FzIFNjaHJvZWRlciBmb3IgcmVnaXN0ZXIgY2FsbGJhY2tzCgkqIHZhbGlkLmM6IG1vZGlmaWVkIHBhdGNoIGZyb20gTHVrYXMgU2Nocm9lZGVyIHRvIHRlc3QKCSAgcmVnaXN0ZXIgY2FsbGJhY2tzIHdpdGggLS1jaGtyZWdpc3RlcgoKU3VuIEphbiAgNSAwMjoyMzoyMCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogc2VyaW91c2x5IGNoYW5nZWQgdGhlIHdheSBkYXRhIGFyZSBwdXNoZWQgdG8KCSAgdGhlIHVuZGVybHlpbmcgcGFyc2VyLCBnbyBieSBibG9jayBvZiA1MTIgYnl0ZXMgaW5zdGVhZCBvZgoJICB0cnluZyB0byBkZXRlY3QgdGFnIGJvdW5kYXJpZXMgYXQgdGhhdCBsZXZlbC4gQ2hhbmdlZCB0aGUKCSAgd2F5IGVtcHR5IGVsZW1lbnQgYXJlIGRldGVjdGVkIGFuZCB0YWdnZWQuCgkqIHB5dGhvbi90ZXN0cy9yZWFkZXIucHkgcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHkKCSAgcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHk6IHNtYWxsIGNoYW5nZXMgbW9zdGx5IGR1ZSB0byBjb250ZXh0CgkgIHJlcG9ydGluZyBiZWluZyBkaWZmZXJlbnQgYW5kIERURCBub2RlIGJlaW5nIHJlcG9ydGVkLiBTb21lCgkgIGVycm9ycyBwcmV2aW91c2x5IHVuZGV0ZWN0ZWQgYXJlIG5vdyBjYXVnaHQgYW5kIGZpeGVkLgoJKiBkb2MveG1scmVhZGVyLmh0bWw6IGZsYWdnZWQgbGFzdCBzZWN0aW9uIGFzIFRPRE8KClNhdCBKYW4gIDQgMjA6NDA6MjggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5weTogaW50ZWdyYXRlZCB0aGUgUHl0aG9uIDIuMiBvcHRpbWl6YXRpb25zCgkgIGZyb20gSGFubnUgS3Jvc2luZywgd2hpbGUgbWFpbnRhaW5pbmcgY29tcGF0aWJpbGl0eSB3aXRoIAoJICAxLjUgYW5kIDIuMQoKU2F0IEphbiAgNCAxNzozMzoxNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGEgYml0IG9mIGNsZWFudXAKCSogeG1scmVhZGVyLmM6IHNtYWxsIGZpeAoJKiBkb2MveG1scmVhZGVyLmh0bWw6IG1vcmUgd29yayBvbiB0aGUgWG1sVGV4dFJlYWRlciB0dXRvcmlhbAoJKiBweXRob24vbGlieG1sLnB5OiBhIGZldyBmaXhlcyBwb2ludGVkIG91dCBieSBIYW5udSBLcm9zaW5nCgpTYXQgSmFuICA0IDEzOjQ2OjE0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9zZXR1cC5weS5pbjogcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwgdG8gaW5jbHVkZQoJICBkcnZfbGlieG1sMi5weSBpbiBzZXR1cC5weQoKU2F0IEphbiAgNCAwMTo0MzowNiBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1scmVhZGVyLmh0bWw6IHN0YXJ0aW5nIGRvY3VtZW50aW5nIHRoZSBuZXcgWG1sVGV4dFJlYWRlcgoJICBpbnRlcmZhY2UuCgpGcmkgSmFuICAzIDE3OjE4OjMyIENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYWRkZWQgdGhlIC0tc3RyZWFtIGZsYWcgdG8gdXNlIHRoZSBUZXh0UmVhZGVyIEFQSQoJKiB4bWxyZWFkZXIuYzogc21hbGwgcGVyZm9ybWFuY2UgdHdlYWsKCkZyaSBKYW4gIDMgMTM6NTA6NTUgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlcjJweTogb2theSB0aGUgRFREIHZhbGlkYXRpb24KCSAgY29kZSBvbiB0b3Agb2YgdGhlIFhNTFRleHRQYXJzZXIgQVBJIHNob3VsZCBiZSBzb2xpZCBub3cuCgpGcmkgSmFuICAzIDAyOjE3OjE4IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIycHk6IEZpeGluZyBzb21lIG1vcmUgbWVzcwoJICB3aXRoIHZhbGlkYXRpb24gYW5kIHJlY3Vyc2l2ZSBlbnRpdGllcyB3aGlsZSB1c2luZyB0aGUKCSAgcmVhZGVyIGludGVyZmFjZSwgaXQncyBnZXR0aW5nIGEgYml0IG1lc3N5Li4uCgpUaHUgSmFuICAyIDE1OjE1OjI2IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGFub3RoZXIgY291cGxlIG9mIHByb2JsZW0KCSAgcmVsYXRlZCB0byBJc0VtcHR5RWxlbWVudCByZXBvcnRlZCBieSBTdOlwaGFuZSBCaWRvdWwgbmVlZGVkIAoJICBzb21lIGZpeGVzLgoKVGh1IEphbiAgMiAxMzo1NzowNyBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2Rydl9saWJ4bWwyLnB5OgoJICBpbnRlZ3JhdGVkIGRydl9saWJ4bWwyLnB5IFB5dGhvbiB4bWwuc2F4IGRyaXZlciBmcm9tIFN06XBoYW5lIEJpZG91bAoJICBiYXNlZCBvbiB0aGUgcHl0aG9uIFhtbFRleHRSZWFkZXIgaW50ZXJmYWNlLgoKV2VkIEphbiAgMSAyMjowNTo0MCBDRVQgMjAwMyBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGJhY2tpbmcgb3V0IG9uZSBjaGFuZ2UgaW4gdGhlIGxhc3QgcGF0Y2ggd2hpY2ggYnJva2UgdGhlCgkgIHJlZ3Jlc3Npb24gdGVzdHMKCldlZCBKYW4gIDEgMjE6NTc6MjggQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFsLmRhdGEgZ2xvYmFscy5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmg6IGFwcGxpZWQKCSAgYW4gb2xkIHBhdGNoIGZyb20gTHVrYXMgU2Nocm9lZGVyIHRvIHRyYWNrIG5vZGUgY3JlYXRpb24gYW5kCgkgIGRlc3RydWN0aW9uLiBQcm9iYWJseSBtaXNzaW5nIGEgbG90IG9mIHJlZmVyZW5jZXMgYXQgdGhlIG1vbWVudAoJICBhbmQgbm90IHVzYWJsZSByZWxpYWJseS4KCldlZCBKYW4gIDEgMjA6MTI6MDcgQ0VUIDIwMDMgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTkVXUyBkb2MvTWFrZWZpbGUuYW0gZG9jL25ld3MueHNsOiBnZW5lcmF0ZSB0aGUgTkVXUyBmaWxlCgkgIGZyb20gZG9jL25ld3MuaHRtbCBhbmQgYSBzdHlsZXNoZWV0CgpXZWQgSmFuICAxIDE2OjA5OjU3IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGFub3RoZXIgY291cGxlIG9mCgkgIHhtbHJlYWRlciBidWdzIHJlcG9ydGVkIGJ5IFN06XBoYW5lIEJpZG91bCBhbmQgYWRkZWQgdGVzdHMuCgpXZWQgSmFuICAxIDE1OjQyOjU0IENFVCAyMDAzIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5OiBmaXhlZCBhbm90aGVyIHZhbGlkaXR5CgkgIGNoZWNraW5nIGluIGV4dGVybmFsIHBhcnNlZCBlbnRpdGllcyByYWlzZWQgYnkgU3TpcGhhbmUgQmlkb3VsCgkgIGFuZCBhZGRlZCBhIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdC4KCSogcHl0aG9uL3Rlc3RzL3JlYWRlcjMucHk6IGNsZWFudXAKClR1ZSBEZWMgMzEgMTU6NDQ6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHk6IGZpeGVkIGEgcHJvYmxlbSB3aXRoCgkgIHZhbGlkYXRpb24gd2l0aGluIGVudGl0aWVzIHBvaW50ZWQgYnkgU3TpcGhhbmUgQmlkb3VsLCBhdWdtZW50ZWQKCSAgdGhlIHRlc3RzIHRvIGNhdGNoIHRob3NlLgoKVHVlIERlYyAzMSAxMjoxNTozNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5OiBtb2RpZmllZCB0aGUgZ2VuZXJhdG9yIHRvIGFsbG93IGtlZXBpbmcKCSAgY2xhc3MgcmVmZXJlbmNlcyB3aGVuIGNyZWF0aW5nIG5ldyBjbGFzc2VzLCBuZWVkZWQgdG8gZml4IGEgYnVnCgkgIHBvaW50ZWQgYnkgU3TpcGhhbmUgQmlkb3VsIHdoZXJlIHRoZSBpbnB1dCBidWZmZXIgb2YgdGhlCgkgIHhtbFRleHRSZWFkZXIgaW5zdGFuY2UgZ2V0cyBkZXN0cm95ZWQgaWYgdGhlIHB5dGhvbiB3cmFwcGVyIGZvcgoJICB0aGUgaW5wdXQgaXMgbm90IHJlZmVyZW5jZWQgYW55bW9yZS4KCk1vbiBEZWMgMzAgMTk6Mzk6MzYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYW5vdGhlciBwYWlyIG9mIHByb2JsZW0KCSAgcG9pbnRlZCBieSBTdOlwaGFuZSBCaWRvdWw6IGRlcHRoIHN0YXJ0IGF0IDAgYW5kIGEgcGFyc2UgcHJvYmxlbS4KCk1vbiBEZWMgMzAgMTM6MzY6NTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogZml4ZWQgYW5vdGhlciBwcm9ibGVtCgkgIHBvaW50ZWQgYnkgU3TpcGhhbmUgQmlkb3VsCgpNb24gRGVjIDMwIDEyOjM5OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlYWRlci5jIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGZpeGVkIGEgbGltaXQgY2FzZSBwcm9ibGVtCgkgIHdpdGggIjxhLz4iCgpNb24gRGVjIDMwIDExOjUzOjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiB3YXJuIG9uIHhtbG5zOnByZWZpeD0iZm9vIgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtCgkgIGZvciBuYW1lc3BhY2UgYXR0cmlidXRlcyBoYW5kbGluZy4KCk1vbiBEZWMgMzAgMDA6NTk6MDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYyBwYXJzZXIuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaDogRml4ZWQKCSAgYSByZWFsbHkgbmFzdHkgcHJvYmxlbSByYWlzZWQgYnkgYSBEb2NCb29rIFhTTFQgdHJhbnNmb3JtCgkgIHByb3ZpZGVkIGJ5IFNlYmFzdGlhbiBCZXJnbWFubgoKU3VuIERlYyAyOSAxMjoxMzoxOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBmaXhlZCBhIGJ1ZyBwb2ludGVkIG91dAoJICBieSBTdOlwaGFuZSBCaWRvdWwgYW5kIGludGVncmF0ZWQgaXQgaW50byB0aGUgdGVzdHMKClNhdCBEZWMgMjggMjM6NDk6MTIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggZG9jL2xpYnhtbDItYXBpLnhtbDoKCSAgZXh0ZW5kZWQgdGhlIFhtbFRleHRSZWFkZXIgQVBJIGEgYml0LCBhZGRkaW5nIGFjY2Vzc29ycyBmb3IKCSAgdGhlIGN1cnJlbnQgZG9jIGFuZCBub2RlLCBhbmQgYW4gZW50aXR5IHN1YnN0aXR1dGlvbiBtb2RlIGZvcgoJICB0aGUgcGFyc2VyLgoJKiBweXRob24vbGlieG1sLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiByZWxhdGVkIHVwZGF0ZXMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXIucHkgCgkgIHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5IHB5dGhvbi90ZXN0cy9yZWFkZXIzLnB5OiB1cGRhdGVkIGEgYml0CgkgIHRoZSBvbGQgdGVzdHMgYW5kIGFkZGVkIGEgbmV3IG9uZSB0byB0ZXN0IHRoZSBlbnRpdGllcyBoYW5kbGluZwoKU2F0IERlYyAyOCAyMjoxMTo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IAoJICBweXRob24vdGVzdHMvcmVhZGVyLnB5IHB5dGhvbi90ZXN0cy9yZWFkZXIyLnB5OiBjaGFuZ2VkIHRoZQoJICBnZW5lcmF0b3IgdG8gcHJvdmlkZSBjYXNpbmcgZm9yIHRoZSBYbWxUZXh0UmVhZGVyIHNpbWlsYXIgdG8KCSAgQyMgc28gdGhhdCBleGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgbW9yZSBkaXJlY3RseSB0cmFuc3Bvc2FibGUuCgkgIEZpeGVkIHRoZSBjb3VwbGUgb2YgdGVzdHMgaW4gdGhlIHN1aXRlLgoKU2F0IERlYyAyOCAxNTo1NTozMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvZ3VpZGVsaW5lcy5odG1sOiBhZGRlZCBhIGRvY3VtZW50IG9uIGd1aWxkZWxpbmUgZm9yCgkgIHB1Ymxpc2hpbmcgYW5kIGRlcGxveWluZyBYTUwKCkZyaSBEZWMgMjcgMjA6MzU6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyB4bWxyZWFkZXIuYzogZmluYWwgdG91Y2ggcnVubmluZyBEVEQgdmFsaWRhdGlvbgoJICBvbiB0aGUgWG1sVGV4dFJlYWRlcgoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3JlYWRlcjIucHk6IGFkZGVkIGEKCSAgc3BlY2lmaWMgcnVuIGJhc2VkIG9uIHRoZSBleGFtcGxlcyBmcm9tIHRlc3QvdmFsaWQvKi54bWwKCkZyaSBEZWMgMjcgMTU6MTc6MjAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5weTogYWRkZWQgYSBmZXcgcHJlZGVmaW5lZCB4bWxUZXh0UmVhZGVyIHBhcnNlcgoJICBjb25maWd1cmF0aW9uIHZhbHVlcy4KCkZyaSBEZWMgMjcgMTI6NTc6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbF93cmFwLmg6IHRyeWluZyB0byBmaXggIzEwMjAzNwoKRnJpIERlYyAyNyAxMjoxODoxNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogZml4aW5nIGJ1ZyAjOTUyOTYsIHdoZW4gdGhlIHByZWRlZmluZWQgZW50aXRpZXMKCSAgYXJlIHJlZGVmaW5lZCBpbiB0aGUgRFREIHRoZSBkZWZhdWx0IG9uZSBtdXN0IGJlIHVzZWQKCSAgaW5zdGVhZCBhbnl3YXkuCgpXZWQgRGVjIDI1IDE5OjIyOjA2IE1TVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwKCSogZG9jL3htbGxpbnQuMQoJQWRkIGRpc2N1c3Npb24gb2YgWE1MX0RFQlVHX0NBVEFMT0cgdG8geG1sbGludCBtYW4KCXBhZ2UgLSBidWcgIzEwMDkwNwoKTW9uIERlYyAyMyAxNjo1NDoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYzogRml4ZWQgdGhlIGVtcHR5IG5vZGUgZGV0ZWN0aW9uIHRvIGF2b2lkIHJlcG9ydGluZwoJICBhbiBpbmV4aXN0YW50IGNsb3NlIHRhZy4KCk1vbiBEZWMgMjMgMTU6NDI6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9zZXR1cC5weS5pbjogcGF0Y2ggZnJvbSBTdOlwaGFuZSBCaWRvdWwKCSAgZm9yIFB5dGhvbiAyLjEKClN1biBEZWMgMjIgMTE6MjQ6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdEMxNE4uYyB2bXMvY29uZmlnLnZtczogYXBwbGllZCBDcmFpZyBBLiBCZXJyeSBwYXRjaGVzIGZvciBWTVMKCkZyaSBEZWMgMjAgMTE6Mjc6NDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2xpYnhtbDItYXBpLnhtbCBweXRob24vdGVzdHMvcmVhZGVyLnB5OiBvbmUgcmVhbGx5IG5lZWQKCSAgdG8gcHJvdmlkZSB0aGUgYmFzZSBVUkkgaW5mb3JtYXRpb24gd2hlbiBjcmVhdGluZyBhIHJlYWRlciBwYXJzZXIKCSAgZnJvbSBhbiBpbnB1dCBzdHJlYW0uIFVwZGF0ZWQgdGhlIEFQSSBhbmQgdGhlIGV4YW1wbGUgdXNpbmcgaXQuCgpGcmkgRGVjIDIwIDAxOjExOjMwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RSZWFkZXIuYyB4bWxyZWFkZXIuYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiB3b3JraW5nIG9uCgkgIERURCB2YWxpZGF0aW9uIG9uIHRvcCBvZiB4bWwgcmVhZGVyIGludGVyZmFjZXMuIEFsbG93cyB0bwoJICB2YWxpZGF0ZSBhcmJpdHJhcnkgbGFyZ2UgaW5zdGFuY2VzLiBUaGlzIHJlcXVpcmVkIHNvbWUgZXh0ZW5zaW9ucwoJICB0byB0aGUgdmFsaWQgbW9kdWxlIGludGVyZmFjZSBhbmQgYXVnbWVudGluZyB0aGUgc2l6ZSBvZiB4bWxJRAoJICBhbmQgeG1sUmVmIHN0cnVjdHMgYSBiaXQuCgkqIHVyaS5jIHhtbHJlZ2V4cC5jOiBzaW1wbGUgY2xlYW51cC4KCldlZCBEZWMgMTggMTU6NTE6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVhZGVyLmMgaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmggZG9jL2xpYnhtbDItYXBpLnhtbDogbW9yZQoJICB3b3JrIG9uIHRoZSB4bWwgcmVhZGVyIGludGVyZmFjZXMuCgkqIEFVVEhPUlMgTUFJTlRBSU5FUlMgZG9jLyogd2luMzIvKjogdXBkYXRlZCBJZ29yJ3MgbWFpbCBhbmQgdGhlCgkgIFdlYiBwYWdlIGZvciB0aGUgV2luZG93cyBiaW5hcmllcy4KClR1ZSBEZWMgMTcgMTk6MzE6MDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBhIHBhdGNoIGZvciBWTVMgZm9sbG93aW5nIHRoZSByZXBvcnQgYnkKCSAgTmlnZWwgSGFsbAoKVHVlIERlYyAxNyAxMToyOTo0MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogdGhlIHBhcnNlU3RhcnRUYWcgYnVnIGZpeCB3YXNuJ3QgY29tcGxldGUuCgpNb24gRGVjIDE2IDIzOjAwOjA1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBWeWFjaGVzbGF2IFBpbmR5dXJhIG1hbmFnZWQgdG8gdHJpZ2dlciBhIGJ1ZyBpbgoJICBwYXJzZVN0YXJ0VGFnLCBmaXhpbmcgaXQuCgkqIHRlc3QvYXR0NCByZXN1bHQvYXR0NCByZXN1bHQvbm9lbnQvYXR0NDogYWRkaW5nIHRoZSB0ZXN0CgkqIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oIGRvYy9saWJ4bWwyLWFwaS54bWw6IGFkZGVkCgkgIG1vcmUgbWV0aG9kcyB0byBYbWxUZXh0UmVhZGVyLgoKTW9uIERlYyAxNiAxOTozMToxNiBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYWRkZWQgbW9yZSB4bWwgcmVhZGVyIGV4cG9ydHMKCSogd2luMzIvTWFrZWZpbGUubXN2YyB3aW4zMi9NYWtlZmlsZS5taW5ndzogYWRkZWQgeG1sIHJlYWRlciBpbnRlcmZhY2UKCSAgdG8gdGhlIGJ1aWxkCgpNb24gRGVjIDE2IDA2OjM2OjU0IE1TVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sCglwbHVzIGdlbmVyYXRlZCBodG1sIGFuZCBwZGYKCVVwZGF0aW5nIHR1dG9yaWFsIGFnYWluIGJhc2VkIG9uIGZ1cnRoZXIgY29tbWVudHMgZnJvbSBOaXJhagoJVG9saWEgb24gdGhlIGxhc3QgaXRlcmF0aW9uCgpTdW4gRGVjIDE1IDIxOjI3OjMwIE1TVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvdHV0b3JpYWwveG1sdHV0b3JpYWwueG1sCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRla2V5d29yZC5jCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlZ2V0YXR0cmlidXRlLmMKCXBsdXMgZ2VuZXJhdGVkIGh0bWwgYW5kIHBkZgoJQWRkaW5nIGZpeCBmcm9tIE5pcmFqIFRvbGlhIHRvIHR1dG9yaWFsIHRvIHByb3Blcmx5IGZyZWUgbWVtb3J5LgoKTW9uIERlYyAxNiAwMDozNDoyNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBpbmNsdWRlL2xpYnhtbC94bWxyZWFkZXIuaCBkb2MvbGlieG1sMi1hcGkueG1sOiBhZGRlZAoJICBtb3JlIG1ldGhvZHMgb2YgWG1sVGV4dFJlYWRlci4KCSogcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL3Rlc3RzL3JlYWRlci5weTogdGhpcyBpbmNyZWFzZWQgdGhlCgkgIG1ldGhvZHMgaW4gdGhlIGJuZGluZ3MsIGF1Z21lbnRlZCB0aGUgdGVzdCB0byBjaGVjayB0aG9zZSBuZXcKCSAgZnVuY3Rpb25zLgoKU2F0IERlYyAxNCAyMzo1NzozOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWFkZXIuYyBkb2MvbGlieG1sMi1hcGkueG1sOiBhZGRlZCB0aGUgY2xvc2UgYW5kIGdldGF0dHJpYnV0ZQoJICBtZXRob2RzIG9mIFhtbFRleHRSZWFkZXIuCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmMgCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBhZGRlZCB0aGUgcmVhZGVyIHRvIHRoZSBQeXRob24gYmluZGluZ3MKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9yZWFkZXIucHk6IGFkZGVkIGEgc3BlY2lmaWMKCSAgdGVzdCBmb3IgdGhlIFB5dGhvbiBiaW5kaW5ncyBvZiB0aGUgUmVhZGVyIEFQSXMKCSogcGFyc2VyLmM6IHNtYWxsIGNsZWFudXAuCgpGcmkgRGVjIDEzIDExOjM5OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IGZhbGxiYWNrIHdhcyBvbmx5IGNvcHlpbmcgdGhlIGZpcnN0IGNoaWxkIG5vdCB0aGUKCSAgZnVsbCBjaGlsZCBsaXN0IG9mIHRoZSBmYWxsYmFjayBlbGVtZW50LCBjbG9zZXMgIzg5Njg0IGFzIHJlb3BlbmVkCgkgIGJ5IEJlcm5kIEt1ZW1tZXJsZW4KClRodSBEZWMgMTIgMTM6MzQ6NTkgQ0VUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIGh0bWxOb2RlRHVtcE91dHB1dAoKVGh1IERlYyAxMiAxMDo1OToxMSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIG9mIDIuNC4zMAoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbDogZml4dXBzIHRvIHRoZSBhcGkgYnVpbGRlciwKCSAgZ2l2ZXMgZW51bSB2YWx1ZXMsIGZpeCBmdW5jdHlwZSByZXR1cm4gdHlwZSwgcHV0IGJhY2sgZmllbGRzIGluCgkgIHN0cnVjdHMgCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2NzIHJlYnVpbHQKClRodSBEZWMgMTIgMDE6MDk6MzQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oOiBwYXRjaCBmcm9tIE1hcmsgVmFrb2MKCSAgYWJvdXQgaHRtbE5vZGVEdW1wT3V0cHV0IGxvY2F0aW9uLgoJKiB4cGF0aC5jOiByZW1vdmVkIGFuIHVuZGVmaW5lZCBmdW5jdGlvbiBzaWduYXR1cmUKCSogZG9jL2FwaWJ1aWxkLnB5IGRvYy9saWJ4bWwyLWFwaS54bWw6IHRoZSBzY3JpcHQgd2FzIGV4cG9ydGluZwoJICB0b28gbWFueSBzeW1ib2xzIGluIHRoZSBBUEkgYnJlYWtpbmcgdGhlIHB5dGhvbiBiaW5kaW5ncy4KCSAgVXBkYXRlZCB3aXRoIHRoZSBsaWJ4c2x0L2xpYmV4c2x0IGNoYW5nZXMuCgpXZWQgRGVjIDExIDIwOjI2OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIHJlbGVhc2Ugb2YgMi40LjI5CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2NzIGFuZCBBUEkKCSogeG1scmVhZGVyLmM6IGEgZmV3IG1vcmUgZml4ZXMgZm9yIHRoZSBYbWxUZXh0UmVhZGVyIEFQSQoKV2VkIERlYyAxMSAxODowMToxNSBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYXBwbGllZCBtaW5ndyBwYXRjaCBmcm9tIE1hZ251cyBIZW5vY2gKCldlZCBEZWMgMTEgMTY6NTg6NDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIGRvYy9saWJ4bWwyLWFwaS54bWw6IGEgYml0IG1vcmUgY2xlYW51cAoKV2VkIERlYyAxMSAxNDo1NDo0NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvYXBpYnVpbGQucHkgZG9jL2xpYnhtbDItYXBpLnhtbCBkb2MvTWFrZWZpbGUuYW06IG5ldyBBUEkKCSAgYnVpbGRpbmcgUHl0aG9uIHNjcmlwdCwgZG9lcyB0aGUgQyBwYXJzaW5nIGRpcmVjdGx5LCBnZW5lcmF0ZXMKCSAgYSBiZXR0ZXIgQVBJIGRlc2NyaXB0aW9uIGluY2x1ZGluZyBzdHJ1Y3R1cmUgZmllZHMgZGVmcyBhbmQKCSAgZW51bXMuIFN0aWxsIGEgY291cGxlIG9mIGJ1Z3MsIGJ1dCBnb29kIGVub3VnaCBmb3IgdGhlIHB5dGhvbgoJICB3cmFwcGVycyBub3cuCgkqIERPQ0JwYXJzZXIuYyBTQVguYyBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYwoJICB2YWxpZC5jIHhtbElPLmMgeG1sbWVtb3J5LmMgeG1scmVhZGVyLmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jCgkgIGluY2x1ZGUvbGlieG1sL3NjaGVtYXNJbnRlcm5hbHMuaCBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IG1vcmUKCSAgY2xlYW51cCBiYXNlZCBvbiB0aGUgcHl0aG9uIGFuYWx5c2lzIHNjcmlwdCByZXBvcnRzLgoJKiBsaWJ4bWwuc3BlYy5pbjogbWFrZSBzdXJlIHRoZSBBUEkgWE1MIGRlc2NyaXB0aW9uIGlzIHBhcnQgb2YgdGhlCgkgIGRldmVsIHBhY2thZ2UuCgpUdWUgRGVjIDEwIDE2OjE2OjM0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgYzE0bi5jIGRlYnVnWE1MLmMgZW5jb2RpbmcuYyBoYXNoLmMKCSAgbmFub2Z0cC5jIG5hbm9odHRwLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgdGVzdEMxNE4uYwoJICB0ZXN0RG9jYm9vay5jIHRocmVhZHMuYyB0cmVlLmMgdmFsaWQuYyB4bWxJTy5jIHhtbGxpbnQuYyB4bWxtZW1vcnkuYwoJICB4bWxyZWFkZXIuYyB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgeHBhdGguYzoKCSAgY29kZSBjbGVhbnVwLCBlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbiBjb21tZW50cy4KCSogdHJlZS5jOiBmaXhlZCBhIHNtYWxsIGJ1ZyB3aGVuIGZyZWVpbmcgbm9kZXMgd2hpY2ggYXJlIFhJbmNsdWRlIG9uZXMuCgpNb24gRGVjICA5IDE1OjA4OjE3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIHhtbHJlYWRlci5jIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGluY2x1ZGUvbGlieG1sL3htbHJlYWRlci5oOiAgQWRkaW5nIGEgbmV3IHNldCBvZiBBUElzIGJhc2VkIG9uCgkgIHRoZSBDIyBUZXh0WG1sUmVhZGVyIEFQSSBidXQgY29udmVydGVkIHRvIEMuIEFsbG93IHRvIHBhcnNlCgkgIGluIGNvbnN0YW50IG1lbW9yeSB1c2FnZSwgZmFyIHNpbXBsZXIgdG8gcHJvZ3JhbSBhbmQgZXhwbGFpbgoJICB0aGFuIHRoZSBTQVggbGlrZSBBUElzLCB1bmZpbmlzaGVkIGJ1dCB3b3JraW5nLgoJKiB0ZXN0UmVhZGVyLmM6IHRlc3QgcHJvZ3JhbQoKU3VuIERlYyAgOCAxODozNjowMSBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYXBwbGllZCBZQUxEU1AgZnJvbSBNYXJrIFZha29jCgpXZWQgRGVjICA0IDE2OjA4OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQ2hpcCB0dXJuZXIgaW5kaWNhdGVkIHRoYXQgWEhUTUwxIHNlcmlhbGl6YXRpb24KCSAgcnVsZSBmb3Igc3R5bGUgYWN0dWFsbHkgYnJlYWsgb24gYm90aCBJRSBhbmQgTW96aWxsYSwgCgkgIHRyeSB0byBhdm9pZCB0aGUgcnVsZSBpZiBlc2NhcGluZyBhaW4ndCBuZWNlc3NhcnkKCldlZCBEZWMgIDQgMTI6NDM6MjggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFuaHR0cC5jOiBoYW5kbGUgSFRUUCBVUkwgZXNjYXBpbmcsIHByb2JsZW0gcmVwb3J0ZWQgYnkKCSAgR2xlbiBOYWthbXVyYSBhbmQgU3RlZmFubyBaYWNjaGlyb2xpCgpTYXQgTm92IDMwIDEyOjE5OjE3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgcGFyc2VyLmMgdmFsaWQuYyB4cGF0aC5jOiBjb2RlIGNsZWFudXAKClRodSBOb3YgMjggMTI6NTM6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdXJpLmM6IEpvaGFubiBSaWNoYXJkIHBvaW50ZWQgb3V0IHNvbWUgWFBvaW50ZXIgcHJvYmxlbXMgZm9yCgkgIFVSTiBiYXNlZCBVUkkgcmVmZXJlbmNlcyBpbiBYSW5jbHVkZS4gTW9kaWZpZWQgdGhlIFVSSSBwYXJzaW5nCgkgIGFuZCBzYXZpbmcgcm91dGluZXMgdG8gYWxsb3cgY29ycmVjdCBwYXJzaW5nIGFuZCBzYXZpbmcgb2YgCgkgIFhQb2ludGVycywgZXNwZWNpYWxseSB3aGVuIGF0dGFjaGVkIHRvICJvcGFxdWUiIHNjaGVtZSBhY2NvcmRpbmdseQoJICB0byBSRkMgMjM5NgoKV2VkIE5vdiAyNyAyMDozNjowOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIGluY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmg6IGFwcGxpZWQgdGhlIHNhbWUga2luZAoJICBvZiByZWZhY3RvcmluZyB0byB0aGUgSFRNTCBzYXZpbmcgY29kZS4KCSogZG9jL2xpYnhtbDItKi54bWwgZG9jL0FQSSouaHRtbDogc2xpZ2h0IEFQSSBjaGFuZ2VzIGdvdCByZWZsZWN0ZWQKCSAgaW4gdGhlIGRvYy4KCldlZCBOb3YgMjcgMTI6NDA6MTYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogcmVmYWN0b3JlZCB0aGUgWE1MIGR1bXAgb2YgYSBub2RlCgkgIHRvIGEgYnVmZmVyIEFQSSB0byByZXVzZSB0aGUgZ2VuZXJpYyBkdW1wIHRvIGFuIE91dHB1dElPIGxheWVyLAoJICB0aGlzIHJlZHVjZXMgY29kZSwgZml4ZXMgeG1sTm9kZUR1bXAoKSBmb3IgWEhUTUwsIGFsc28gbWFkZQoJICB4bWxOb2RlRHVtcCgpIG5vdyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlIHdyaXR0ZW4uCgpXZWQgTm92IDI3IDA5OjAwOjAwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9zZXR1cC5weS5pbjogYW5vdGhlciBwYXRjaCBmcm9tIFN06XBoYW5lIEJpZG91bCBmb3IgCgkgIFB5dGhvbiBiaW5kaW5ncyBvbiBXaW5kb3dzCgkqIGRvYy9wYXJzZWRlY2wucHk6IHNtYWxsIGNsZWFudXAKCk1vbiBOb3YgMjUgMTc6Mjg6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gY29uZmlndXJlLmluOiBhZGQgYSBsaW5lIGluICVjaGFuZ2Vsb2cgZm9yIHJlbGVhc2VzCgpNb24gTm92IDI1IDE0OjE4OjI3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBwYXRjaCBmcm9tIE1hcmN1cyBDbGFya2UgZml4aW5nIGEgcHJvYmxlbSBpbiBlbnRpdGllcwoJICBwYXJzaW5nIHRoYXQgd2FzIGRldGVjdGVkIGluIEtEZSBkb2N1bWVudGF0aW9ucyBlbnZpcm9ubWVudC4KCk1vbiBOb3YgMjQgMTQ6MTM6MjEgQ0VUIDIwMDIgRVJESSBHZXJnbyA8Y2FjdHVzQGNhY3R1cy5ydWxlei5vcmc+CgoJKiBweXRob24vbGlieG1sLmMgKGxpYnhtbF9wcmV2KTogUmV0dXJuIHRoZSBwcmV2aW91cyBhcyBvcHBvc2VkIHRvCgl0aGUgbmV4dCBub2RlIChJIGd1ZXNzIHRoaXMgaXMgdGhlIHJlc3VsdCBvZiBzb21lIGN1dCAmIHBhc3RlIHByb2dyYW1taW5nOikKClNhdCBOb3YgMjMgMTc6MjI6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtOiBKYW4gUmFmYWogcG9pbnRlZCBhIGJ1ZyBpbiB0aGUgTWFrZWZpbGUuCgpTYXQgTm92IDIzIDEyOjIxOjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9zZXR1cC5weS5pbjogdHJ5aW5nCgkgIHRvIGZpeCB0aGUgUHl0aG9uIGJpbmRpbmdzIGJ1aWxkIG9uIFdpbmRvd3MgKFN06XBoYW5lIEJpZG91bCkKCkZyaSBOb3YgMjIgMjI6NDE6MzQgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvY29uZmlndXJlLmpzOiBhZGRlZCBvcHRpb24gZm9yIHB5dGhvbiBiaW5kaW5ncwoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIG1vcmUgZXhwb3J0cwoKRnJpIE5vdiAyMiAxODo1MDozNCBDRVQgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL01ha2VmaWxlLm1pbmd3OiBmaXhlZCB1bnJlc29sdmVkIHN5bWJvbHMgd2hlbiBsaW5raW5nIHdpdGgKCSAgcHRocmVhZHMKCSogd2luMzIvd2luY2UvKjogYXBwbGllZCB1cGRhdGVzIHRvIFdpbmRvd3MgQ0UgcG9ydCBmcm9tIEphdmllcgoKRnJpIE5vdiAyMiAxNTo1MToyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjgKCSogbGlieG1sLnNwZWMuaW4gZG9jL01ha2VmaWxlLmFtOiBzb21lIGNsZWFudXAKCSogZG9jLyo6IHVwZGF0ZWQgdGhlIG5ld3MgYW5kIHJlZ2VuZXJhdGVkLgoKRnJpIE5vdiAyMiAxNDoxNToxNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpbmFsIHRvdWNoIGF0IGNsb3NpbmcgIzg3MjM1IDwvcD4gZW5kIHRhZ3MKCSAgbmVlZCB0byBiZSBnZW5lcmF0ZWQuCgkqIHJlc3VsdC9IVE1ML2NmXzEyOC5odG1sIHJlc3VsdC9IVE1ML3Rlc3QyLmh0bWwgcmVzdWx0L0hUTUwvdGVzdDMuaHRtbDoKCSAgdGhpcyBjaGFuZ2Ugc2xpZ2h0bHkgdGhlIG91dHB1dCBvZiBhIGZldyB0ZXN0cwoJKiBkb2MvKjogcmVnZW5lcmF0ZWQKCkZyaSBOb3YgMjIgMTM6MjY6MTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGluZyBidWcgIzk5MTkwIHdoZW4gVVRGOCBkb2N1bWVudCBhcmUKCSAgcGFyc2VkIHVzaW5nIHRoZSBwcm9ncmVzc2l2ZSBwYXJzZXIgYW5kIHRoZSBlbmQgb2YgdGhlIGNodW5rCgkgIGlzIGluIHRoZSBtaWRkbGUgb2YgYW4gVVRGOCBtdWx0aWJ5dGUgY2hhcmFjdGVyLgoKRnJpIE5vdiAyMiAxMzoxMzowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHRocmVhZHMuYzogZml4ZWQgaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBpbiB4bWxOZXdHbG9iYWxTdGF0ZQoJICB3aGljaCB3YXMgY2F1c2luZyBjcmFzaC4KCSogZ2xvYmFscy5jOiByZW1vdmVkIGR1cGxpY2F0ZSBjYWxsIHRvIGluaXR4bWxEZWZhdWx0U0FYSGFuZGxlcgoJICBpbiB4bWxJbml0aWFsaXplR2xvYmFsU3RhdGUuCgkqIHBhcnNlckludGVybmFscy5jOiBjbGVhbmVkIHVwIGN0eHQtPnNheCBpbml0aWFsaXNhdGlvbi4KClRodSBOb3YgMjEgMTU6MDU6NDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogbW9kaWZpZWQgdGhlIGV4aXN0aW5nIEFQSXMKCSAgdG8gaGFuZGxlIFhIVE1MMSBzZXJpYWxpemF0aW9uIHJ1bGVzIGF1dG9tYXRpY2FsbHksIGFsc28gYWRkCgkgIHhtbElzWEhUTUwoKSB0byBsaWJ4bWwyIEFQSS4gU29tZSB0d2Vha2luZyB0byBtYWtlIHN1cmUKCSAgbGlieHNsdCBzZXJpYWxpemF0aW9uIHVzZXMgaXQgd2hlbiBuZWVkZWQgd2l0aG91dCBjaGFuZ2luZwoJICB0aGUgbGlicmFyeSBBUEkuCgkqIHRlc3QveGh0bWwxIHJlc3VsdC9ub2VudC94aHRtbDEgcmVzdWx0L3ZhbGlkL3hodG1sMS54aHRtbAoJICByZXN1bHQveGh0bWwxOiBhZGRlZCBhIG5ldyB0ZXN0IHNwZWNpZmljYWxseSBmb3IgeGh0bWwxIG91dHB1dAoJICBhbmQgdXBkYXRlZCB0aGUgcmVzdWx0IG9mIG9uZSBYSFRNTDEgdGVzdAoKV2VkIE5vdiAyMCAxNDoyNDo1NiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jIHBhcnNlckludGVybmFscy5jIGVuY29kaW5nLmM6IGZpeGVkICM5OTA4MgoJICBmb3IgeGk6aW5jbHVkZSBlbmNvZGluZz0iLi4uIiBzdXBwb3J0IG9uIHRleHQgaW5jbHVkZXMuCgkqIHJlc3VsdC9YSW5jbHVkZS90c3RlbmNvZGluZy54bWwgdGVzdC9YSW5jbHVkZS9kb2NzL3RzdGVuY29kaW5nLnhtbAoJICB0ZXN0L1hJbmNsdWRlL2VudHMvaXNvbGF0aW4udHh0IDogYWRkZWQgYSBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dDogZml4ZWQgdGhlIGdlbmVyYXRvcgoJICB0aGUgbmV3IHNldCBvZiBjb21tZW50cyBnZW5lcmF0ZWQgZm9yIGRvYy9saWJ4bWwyLWFwaS54bWwgd2VyZQoJICBicmVha2luZyB0aGUgcHl0aG9uIGdlbmVyYXRpb24uCgpUdWUgTm92IDE5IDIzOjI1OjQ3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogcmVwYWlyIHNvbWUgcHJvYmxlbSBpZiBndGstZG9jIGZhaWwgb3Igc3VjaAoJKiBjb25maWd1cmUuaW46IHBhdGNoIGZvciBTb2xhcmlzIG9uIG5ldyBhdXRvY29uZiBjbG9zZXMgIzk4ODgwIAoJKiBkb2MvcGFyc2VkZWNsLnB5OiByZXBhaXIgdGhlIGZyaWdnaW5nIEFQSSBidWlsZGluZyBzY3JpcHQsCgkgIGRpZCBJIHNheSB0aGF0IHB5dGhvbiB4bWxsaWIgc3Vja3MgPwoJKiBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9saWJ4bWwyLXJlZnMueG1sOiByZWdlbmVyYXRlZCwgcmVvcmRlcmluZwoJICBhbmQgc29tZSBjb21tZW50IGFyZSBubyBtb3JlIHRydW5jYXRlZC4KClR1ZSBOb3YgMTkgMDk6MDk6MDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IE1hcnRpbiBTdG9pbG92IHBvaW50ZWQgb3V0IGEgcG90ZW50aWFsIGxlYWsgaW4KCSAgeG1sQ3JlYXRlTWVtb3J5UGFyc2VyQ3R4dAoKTW9uIE5vdiAxOCAxNjowNTo1MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGVkIGJ1ZyAjOTg4NzkgYSBjb3JuZXIgY2FzZSB3aGVuIDAgaXMKCSAgaW5jbHVkZWQgaW4gSFRNTCBkb2N1bWVudHMgYW5kIHVzaW5nIHRoZSBwdXNoIHBhcnNlci4KCk1vbiBOb3YgMTggMDA6MTE6MjQgQ0VUIDIwMDIgRVJESSBHZXJnbyA8Y2FjdHVzQGNhY3R1cy5ydWxlei5vcmc+CgoJKiBjb25maWd1cmUuaW4gKFBZVEhPTl9TSVRFX1BBQ0tBR0VTKTogSWYgLS13aXRoLXB5dGhvbiBpcwoJICBzcGVjaWZpZWQsIGxvb2sgZm9yIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbm90IGp1c3QgaW4gdGhlCgkgIHNwZWNpZmllZCByb290IGJ1dCBhbHNvIGluIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIEZpeGVzICM5ODgyNQoKU3VuIE5vdiAxNyAyMzozNjowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGZpeGluZyBidWcgIzk4NzkyICwgbm9kZSBtYXkgaGF2ZSBubyBkb2MKCSAgYW5kIGRlcmVmZXJlbmNpbmcgd2l0aG91dCBjaGVja2luZyBhaW4ndCBnb29kIC4uLgoKU3VuIE5vdiAxNyAxMDoyNTo0MyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyByZWxlYXNlIDIuNC4yNwoJKiBkb2MvKiA6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogZG9jL01ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiB0cnkgdG8gbWFrZSBzdXJlIHRoZSB0dXRvcmlhbAoJICBhbmQgYWxsIHRoZSBkb2NzIGFyZSBhY3R1YWxseSBwYWNrYWdlZCBhbmQgaW4gdGhlIGZpbmFsIFJQTXMKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IHJlc3RvcmUKCSAgeG1sbGludCAtLXJlY292ZXIgZmVhdHVyZS4KClNhdCBOb3YgMTYgMTY6MzA6MjUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgeHBhdGguYzogZml4aW5nICM5NjkyNSB3aWNoIHdhcyBhbHNvIGRlcGVuZGVudCBvbiB0aGUKCSAgcHJvY2Vzc2luZyBvZiBwYXJzZWQgZW50aXRpZXMsIGFuZCBYUGF0aCBjb21wdXRhdGlvbiBvbiBzdXN0aXR1ZWQKCSAgZW50aXRpZXMuCgkqIHRlc3RYUGF0aC5jOiBtYWtlIHN1cmUgZW50aXRpZXMgYXJlIHN1YnN0aXR1ZWQuCgpGcmkgTm92IDE1IDE2OjIyOjU0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCAjOTY1OTQsIHdoaWNoIHdhcyB0b3RhbGx5IGRlcGVuZGVudCBvbiB0aGUgCgkgIHByb2Nlc3Npbmcgb2YgaW50ZXJuYWwgcGFyc2VkIGVudGl0aWVzLCB3aGljaCBoYWQgdG8gYmUgY2hhbmdlZC4KCkZyaSBOb3YgMTUgMTI6MTY6MDcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbToKCSAgdHJ5aW5nIHRvIGZpeCBidWcgIzk4NTE3IGFib3V0IGJ1aWxkaW5nIG91dHNpZGUgdGhlIHNvdXJjZSB0cmVlCgkqIGRvYy94bWwuaHRtbCBkb2MvRkFRLmh0bWw6IGZpeGVkIHRoZSBsaW5rIHRvIGxpYmljb252ICM5NDU4NQoKVGh1IE5vdiAxNCAxODo0MTo1NSBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGNsZWFudXAKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IGludGVncmF0ZWQgbWluZ3cgaW4gSlNjcmlwdCBjb25maWd1cmUKCSogd2luMzIvTWFrZWZpbGUubXN2YzogbW9kaWZpZWQgdG8gYWxsb3cgbWluZ3cgY29leGlzdGVuY2UKCSogd2luMzIvY29uZmlndXJlLmpzOiBpbnRlZ3JhdGVkIG1pbmd3CgkqIHdpbjMyL1JlYWRtZS50eHQ6IGNsZWFudXAKClR1ZSBOb3YgMTIgMjI6MDY6NDUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jOiBzdHJlbmd0aGVuIHRoZSBndWFyZCBpbiB0aGUgUG9wIG1hY3JvcywKCSAgbGlrZSBpbiB0aGUgWE1MIHBhcnNlciwgY2xvc2VzIGJ1ZyAjOTczMTUKClR1ZSBOb3YgMTIgMjE6NTY6MzkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6IGZpeGVkIGJ1ZyAjOTgzMzggLCBmYXRhbEVycm9yIFNBWAoJICBjYWxsYmFjayBpcyBuZXZlciB1c2VkLgoKVHVlIE5vdiAxMiAxMzozMjo1MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogZml4ZWQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBTQVggc3RydWN0dXJlCgkgIHdoaWNoIHdhcyBicmVha2luZyB4c2x0cHJvYwoJKiB4cGF0aC5jOiBwYXRjaCBmcm9tIFBldHIgUGFqYXMgZm9yIENEQVRBIG5vZGVzCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBQZXRyIFBhamFzIGltcHJvdmluZyB4bWxHZXROb2RlUGF0aCgpCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBwYXRjaCBmcm9tIFBldGVyIEpvbmVzCgkgIHJlbW92aW5nIGEgbGVhayBpbiB4bWxTQVhQYXJzZU1lbW9yeSgpIGFuZCBhZGRpbmcgdGhlCgkgIGZ1bmN0aW9uIHhtbFNBWFBhcnNlTWVtb3J5V2l0aERhdGEoKQoKTW9uIE5vdiAxMSAyMDo0NzowMyBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCWFkZGluZyBwZGYgb2YgdHV0b3JpYWwsIGNoYW5naW5nIHdlYiBwYWdlIHRvIGxpbmsgdG8gaXQKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnBkZgoJKiBkb2MveG1sLmh0bWwKCSogZG9jL2RvY3MuaHRtbAoKU3VuIE5vdiAxMCAyMDo0ODo1NyBNU1QgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDguaHRtbAoJYWRkaW5nIGZpbGUgd2hhdCBJIGZvcmdvdCBmb3IgdHV0b3JpYWwKClN1biBOb3YgMTAgMjA6MzM6MTMgTVNUIDIwMDIgSm9obiBGbGVjayAgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJQWRkaW5nIGVuY29kaW5nIGRpc2N1c3Npb24gdG8gdHV0b3JpYWwKCUFkZGVkOgoJKiBkb2MvdHV0b3JpYWwvaW1hZ2VzLyoucG5nOiBEb2NCb29rIGFkbW9uaXRpb24gaW1hZ2UgZmlsZXMKCSogZG9jL3R1dG9yaWFsL2FwZi5odG1sLCBhcGcuaHRtbDogbmV3IGdlbmVyYXRlZCBodG1sCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRlY29udmVydC5jOiBjb252ZXJzaW9uIGNvZGUgZW50aXR5IGZpbGUKCWNoYW5nZWQ6CgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWw6IERvY0Jvb2sgb3JpZ2luYWwKCSogZG9jL3R1dG9yaWFsLyouaHRtbDogZ2VuZXJhdGVkIGh0bWwKCkZyaSBOb3YgIDggMTc6NTk6MzIgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS9saWJ4bWwvKi5oOiByZXRpcmVkIHhtbHdpbjMydmVyc2lvbi5oCgkqIGRvYy9NYWtlZmlsZS5hbTogcmV0aXJlZCB4bWx3aW4zMnZlcnNpb24uaAoJKiB3aW4zMi9jb25maWd1cmUuanM6IHJldGlyZWQgeG1sd2luMzJ2ZXJzaW9uLmgKCkZyaSBOb3YgIDggMTY6NTU6NDcgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBleHBvcnRlZCBhZGRpdGlvbmFsIHN5bWJvbHMKCSogaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGV4cG9ydGVkIHRoZSByZXN0IG9mIHRoZSB4bWxNZW0qIAoJICBzaXN0ZXJob29kCgpGcmkgTm92ICA4IDE2OjA4OjEzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogZml4ZWQgYSB0eXBvIHBvaW50ZWQgb3V0IGJ5IElnb3IKCSogeHBhdGguYzogdHJ5IHRvIHNwZWVkIHVwIG5vZGUgY29tcGFyZSB1c2luZyBsaW5lIG51bWJlcnMKCSAgaWYgYXZhaWxhYmxlLgoKVGh1IE5vdiAgNyAxNToxNjowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IG1ha2UgeG1sRnJlZU5vZGUoKSBoYW5kbGUgYXR0cmlidXRlcyBjb3JyZWN0bHkuCgpXZWQgTm92ICA2IDIzOjUxOjExIENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogY2F0YWxvZy5jOiBjb21wbGV0ZWQgdGhlICM5Njk2MyBmaXgsIGFzIHJlcG9ydGVkIGJ5IEthcmwKCSAgRWljaHdhbGRlcgoKV2VkIE5vdiAgNiAxNjo0ODo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cG9pbnRlci5jOiB0cmllZCB0byBmaXggYnVnICM5Nzg1MiByZXBvcnRlZCBieSBOaWNvbGFzIE5vZmZrZQoKU3VuIE5vdiAgMyAxMDo0Mzo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogc3dpdGNoZWQgdGhlIG9yZGVyIG9mIGEgY291cGxlIG9mIGluY2x1ZGVzCgkgIHRvIGZpeCBidWdzICM5NzEwMAoKVGh1IE9jdCAzMSAxNzoxMTo0NiBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiBjYXRhbG9nLmM6IGZpeGVkIGJ1ZyAjOTY5NjMsIHJldmVydGVkIHRvIHRoZSBvbGQgYmVoYXZpb3VyIG9mCgkgIHhtbExvYWRDYXRhbG9ncyB0aGF0IHVzZWQgdG8gc2VwYXJhdGUgZGlyZWN0b3JpZXMgd2l0aCBhICc6Jy4KClRodSBPY3QgMzEgMTY6NTU6MjEgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogdGhyZWFkcy5jOiBpbXByb3ZlbWVudHMgdG8gdGhlIFdpbmRvd3Mtc2lkZSBvZiB0aHJlYWQgaGFuZGxpbmcKCSogdGVzdFRocmVhZHMuYzogY29uZGl0aW9uYWxseSBleGNsdWRlZCB1bmlzdGQuaAoJKiB0ZXN0VGhyYWRzV2luMzIuYzogYnJva2Ugb3ZlcmxvbmcgbGluZXMKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBhZGFwdGVkIHRocmVhZC1yZWxhdGVkIG1hY3JvcyB0byB0aGUgbmV3CgkgIHNjaGVtZSBhbmQgZm9yIHB0aHJlYWRzIG9uIFdpbmRvd3MKCSogd2luMzIvTWFrZWZpbGUubXN2YzogaW50cm9kdWNlZCBhIG1vcmUgZmxleGlibGUgdGhyZWFkIGJ1aWxkLCAKCSAgYWRkZWQgdGVzdFRocmVhZHNbV2luMzJdLmMgdG8gdGhlIGJ1aWxkCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogaW50cm9kdWNlZCBhIG1vcmUgZmxleGlibGUgdGhyZWFkIGNvbmZpZwoKMjAwMi0xMC0zMSAgSm9obiBGbGVjayAgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sLmh0bWwgKGFuZCwgYnkgaW1wbGljYXRpb24sIEZBUS5odG1sKQoJYWRkZWQgVVRGLTggY29udmVyc2Fpb24gRkFRIGZyb20gTWFyY3VzIExhYmliIElza2FuZGVyCgpUdWUgT2N0IDI5IDE4OjMyOjMzIENFVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogY29uZmlndXJlLmluOiByZW1vdmVkIHhtbHdpbjMydmVyc2lvbi5oCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiByZW1vdmVkIHhtbHdpbjMydmVyc2lvbi5oCgpNb24gT2N0IDI4IDE0OjAxOjI5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCBmcm9tIEJyaWFuIFN0YWZmb3JkIHRvIGZpeCBhIGJ1ZwoJICBpbiB4bWxSZWNvbmNpbGlhdGVOcygpCgpNb24gT2N0IDI4IDEzOjUxOjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYXBwbGllZCBwYXRjaCBmcm9tIENocmlzdGlhbiBHbGFobiB0byBhbGxvdwoJICB4bWxOZXdDaGlsZCgpIG9uIGRvY3VtZW50IGZyYWdtZW50IG5vZGVzCgpTYXQgT2N0IDI2IDE1OjI3OjAwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogQ2hyaXN0aWFuIEdsYWhuIGZvdW5kIGEgcHJvYmxlbSB3aXRoIGEgcmVjZW50CgkgIHBhdGNoIHRvIHhtbFBhcnNlQmFsYW5jZWRDaHVua01lbW9yeVJlY292ZXIoKQoJKiB4bWxzY2hlbWFzLmM6IENoYXJsZXMgQm96ZW1hbiBmaXhlZCBzb21lIFNjaGVtYXMgdmFsaWRhdGlvbgoJICBwcm9ibGVtcwoJKiByZXN1bHQvc2NoZW1hcy9lbGVtKiByZXN1bHQvc2NoZW1hcy9zZXEqIHRlc3Qvc2NoZW1hcy5lbGVtKgoJICB0ZXN0L3NjaGVtYXMvc2VxKjogYWRkZWQgdGhlIHRlc3QgY2FzZXMgZnJvbSBDaGFybGVzCgpXZWQgT2N0IDIzIDE2OjQyOjI5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWcuaC5pbiBsaWJ4bWwuc3BlYy5pbiBkb2MvTWFrZWZpbGUuYW06CgkgIHNlcmlvdXMgY2xlYW51cCBvZiB0aGUgc3BlYyBmaWxlIGFuZCBhc3NvY2lhdGVkIGNoYW5nZXMKCSAgaW4gdGhlIE1ha2VmaWxlcy4KCSogdmFsaWQuYzogdHJ5IHRvIHJlbW92ZSBzb21lIHdhcm5pbmdzIG9uIHg4Nl82NAoKV2VkIE9jdCAyMyAxMDo1Mzo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogYWRkZWQgd2luc29ja2NvbXBhdC5oIHRvIEVYVFJBX0RJU1QgdG8KCSAgZml4IGJ1ZyAjOTY1ODYKClR1ZSBPY3QgMjIgMjE6MTM6MDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogTWlraGFpbCBTb2dyaW5lIHBvaW50ZWQgb3V0IGEgYnVnIGluIEhUTUwKCSAgcGFyc2luZywgYXBwbGllZCBoaXMgcGF0Y2gKCSogcmVzdWx0L0hUTUwvYXR0cmVudHMuaHRtbCByZXN1bHQvSFRNTC9hdHRyZW50cy5odG1sLmVycgoJICByZXN1bHQvSFRNTC9hdHRyZW50cy5odG1sLnNheCB0ZXN0L0hUTUwvYXR0cmVudHMuaHRtbDoKCSAgYWRkZWQgdGhlIHRlc3QgYW5kIHJlc3VsdCBjYXNlIHByb3ZpZGVkIGJ5IE1pa2hhaWwgU29ncmluZQoKVHVlIE9jdCAyMiAxOTozMzoyMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdm1zL2J1aWxkX2xpYnhtbC5jb20gdm1zL2NvbmZpZy52bXMgdm1zL3JlYWRtZS52bXMKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3htbElPLmgKCSAgSFRNTHBhcnNlci5jIGNhdGFsb2cuYyBkZWJ1Z1hNTC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jCgkgIHRyZWUuYyB0cmlvZGVmLmggdHJpb25hbi5jIHVyaS5jIHhtbElPLmMgeHBhdGguYzoKCSAgQXBwbGllZCB0aGUgVk1TIHVwZGF0ZSBwYXRjaCBmcm9tIENyYWlnIEEuIEJlcnJ5CgkqIGRvYy8qLmh0bWw6IHVwZGF0ZQoKVHVlIE9jdCAyMiAxNjoyNzozMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaCBlbmNvZGluZy5jOiBtYWRlIHhtbEdldFVURjhDaGFyIHB1YmxpYwoKVHVlIE9jdCAyMiAxNjoyNToxOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYWRkaW5nIGEgZ3JlcCBjb21tYW5kIHRvIC0tc2hlbGwgaW4geG1sbGludAoJICBmb3IgVC5WLiBSYW1hbgoKVHVlIE9jdCAyMiAxNjoyMzo1NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sY2F0YWxvZy5jOiB0cmllZCB0byBmaXggc29tZSBvZiB0aGUgcHJvYmxlbSB3aXRoIC0tc2dtbAoKTW9uIE9jdCAyMSAwOTo1NzoxMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHRyaWVkIHRvIGZpeCBidWcgIzkxNTAwIHdoZXJlIGRvYy0+Y2hpbGRyZW4gbWF5CgkgIGJlIG92ZXJyaWRlbiBieSBhIGNhbGwgdG8geG1sUGFyc2VCYWxhbmNlZENodW5rTWVtb3J5KCkKCk1vbiBPY3QgMjEgMDk6MDQ6MzIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogdHJpZWQgdG8gZml4IGJ1ZyAjOTA5NDUgdy5yLnQuIHBhcnNpbmcgb2Ygc3lzdGVtCgkgIGlkZW50aWZpZXJzIGluIFNHTUwgY2F0YWxvZ3MgY29udGFpbmluZyAnJicKClN1biBPY3QgMjAgMjM6MzE6NDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90eXBlcy5jOiBmaXhlZCBidWdzIHdoZW4gcGFzc2luZyByZXN1bHQgdmFsdWUgdHJlZQoJICB0byBQeXRob24gZnVuY3Rpb25zLgoKRnJpIE9jdCAxOCAxMzoxODo1MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgdGhlIHJlbGVhc2Ugb2YgMi40LjI2CgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2N1bWVudGF0aW9uCgpXZWQgT2N0IDE2IDIwOjAxOjQ2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBYTUwgTmFtZXNwYWNlIGNvbXBsaWFuY2UgYnVnIHJlcG9ydGVkIGJ5CgkgIEFsZXhhbmRlciBHcmltYWxvdnNreQoKV2VkIE9jdCAxNiAxNzoxODo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogZml4ZWQgc2VyaWFsaXphdGlvbiBvZiBzY3JpcHQgYW5kIHN0eWxlIHdoZW4KCSAgdGhleSBhcmUgbm90IGxvd2VyY2FzZSAoaS5lLiBhZGRlZCB1c2luZyB0aGUgQVBJIHRvIHRoZSB0cmVlKS4KCldlZCBPY3QgMTYgMTY6MzE6MDUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IG1ha2UgeG1sVmFsaWRhdGVEb2N1bWVudCBlbWl0IGEgd2FybmluZyBtc2cgaWYgdGhlcmUKCSAgaXMgbm8gRFRELCBwb2ludGVkIGJ5IENocmlzdGlhbiBHbGFobgoKV2VkIE9jdCAxNiAxNjowNTozOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jOiBmaXhlZCB0aGUgdmFsaWRhdGlvbiBvZiBzZXF1ZW5jZXMKCSAgY29udGVudCBtb2RlbCB3aGVuIHNvbWUgb2YgdGhlIGJsb2NrcyBoYXZlIG1pbiBvciBtYXgsIGFuZCBhIGNvdXBsZQoJICBvZiBidWdzIGZvdW5kIGluIHRoZSBwcm9jZXNzLgoJKiByZXN1bHQvc2NoZW1hcy9saXN0MCogdGVzdC9zY2hlbWFzL2xpc3QwKjogYWRkZWQgc29tZSBzcGVjaWZpYwoJICByZWdyZXNzaW9uIHRlc3RzCgpUdWUgT2N0IDE1IDEyOjQxOjAxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBSRUFETUU6IHVwZGF0ZWQgdGhlIGNvbnRhY3QgaW5mb3JtYXRpb25zCgpUdWUgT2N0IDE1IDEwOjM1OjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogdXNlIHRlc3QgLWYgaW5zdGVhZCBvZiB0ZXN0IC1lIHNpbmNlIFNvbGFyaXMgL2Jpbi9zaAoJICBtaXNzZXMgaXQsIHJlcG9ydGVkIGJ5IFBldGVyIEJyYXkuCgpNb24gT2N0IDE0IDE3OjM3OjMyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGludmVzdGlnYXRpbmcgeG1sTm9kZUdldENvbnRlbnQoKSBvbiBuYW1lc3BhY2Ugbm9kZXMKCSAgYW5kIHJlbW92ZWQgYSBmZXcgd2FybmluZ3MKCk1vbiBPY3QgMTQgMTM6MTI6NTUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBDaHJpc3RpYW4gR2xhaG4gZm91bmQgYSBzbWFsbCBidWcgaW4gdGhlIHB1c2ggcGFyc2VyLgoJKiB4bWxJTy5jIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGNsZWFuZWQgdXAgYW5kIG1hZGUgeG1sQ2hlY2tGaWxlbmFtZQoJICBwdWJsaWMKCldlZCBPY3QgIDkgMjM6MTE6MDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYyBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmg6IGFkZGVkCgkgIHhtbFNjaGVtYU5ld01lbVBhcnNlckN0eHQgdG8gcGFyc2UgYSBzY2hlbWFzIGZyb20gYSBtZW1vcnkgYXJlYQoJKiB0ZXN0U2NoZW1hcy5jOiBhZGRlZCAtLW1lbW9yeSB0byB0ZXN0IHRoZSBuZXcgaW50ZXJmYWNlCgpXZWQgT2N0ICA5IDE2OjIyOjU0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvaW5kZXgucHkgZG9jL3NlYXJjaC5waHA6IGludGVncmF0ZWQgdGhlIFhTTFQgaW5kZXhpbmcsCgkgIGEgZmV3IGZpeGVkIGluIHRoZSBpbmRleGVyLCBhZGRlZCBhIHNjb3BlIHNlbGVjdGlvbiBhdCB0aGUKCSAgc2VhcmNoIGxldmVsLgoKV2VkIE9jdCAgOSAxMjoxODozNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogSm9lIE1hcmN1cyBDbGFya2UgcmVwb3J0ZWQgYSBzZWdmYXVsdCBvbiBGQnNkIAoJICB0aGlzIHdhcyBkdWUgdG8gdW5pbml0aWFsaXplZCBwYXJ0cyBvZiB0aGUgdmFsaWRhdGlvbiBjb250ZXh0CgpUdWUgT2N0ICA4IDIzOjI0OjIwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gTWFyayBWYWtvYyBleGNlcHQgdGhlIEFQSQoJICBjaGFuZ2UsIHByZXNlcnZlZCBpdC4KCSogZG9jLyo6IHVwZGF0ZWQgdGhlIGRvY3MgdG8gcG9pbnQgdG8gdGhlIHNlYXJjaCBlbmdpbmUgZm9yCgkgIGluZm9ybWF0aW9uIGxvb2t1cCBvciBiZWZvcmUgYnVnL2hlbHAgcmVwb3J0cy4KClR1ZSBPY3QgIDggMTg6NTM6MzEgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9pbmRleC5weSBkb2Mvc2VhcmNoLnBocDogYWRkZWQgbWFpbGluZy1saXN0IGFyY2hpdmVzCgkgIGluZGV4aW5nIGFuZCBsb29rdXAKClR1ZSBPY3QgIDggMTA6MjU6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogcGF0Y2ggZnJvbSBNYXJrIFZha29jIHRvIGZpeCB4bWxOb2RlR2V0UGF0aCgpCgpNb24gT2N0ICA3IDEzOjEyOjAzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvaW5kZXgucHk6IGltcHJvdmVkIEhUTUwgaW5kZXhpbmcKCSogZG9jL3NlYXJjaC5waHA6IG1ha2UgdGhlIHF1ZXJpZXMgYWxzbyBsb29rdXAgdGhlIEhUTUwgYmFzZWQgaW5kZXhlcwoKU3VuIE9jdCAgNiAyMzo1MDoyOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2luZGV4LnB5OiBhZGRlZCBIVE1MIHBhZ2UgaW5kZXhpbmcgCgpGcmkgT2N0ICA0IDE1OjMzOjU1IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHhtbElPLmM6IGV4dGVuZGVkIFdpbmRvd3MgcGF0aCBub3JtYWxpc2F0aW9uIHRvIGZpeCB0aGUgYmFzZQoJICBwcm9ibGVtIGluIGxpYnhzbHQuCgkqIGNhdGFsb2cuYzogZml4ZWQgbGlzdCBoYW5kbGluZyBpbiBYTUxfQ0FUQUxPR19GSUxFUwoKRnJpIE9jdCAgNCAxMzo0MzowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogdHlwby9idWcgZm91bmQgYnkgQ2hyaXN0aWFuIEdsYWhuCgpTdW4gU2VwIDI5IDE5OjQ0OjEwIENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHhtbElPLmM6IGFwcGxpZWQgV2luZG93cyBDRSBwYXRjaCBmcm9tIEphdmllci4KCSogd2luMzIvd2luY2U6IG5ldyBkaXJlY3RvcnksIGNvbnRhaW5zIHN1cHBvcnQgZm9yIHRoZSBQb2NrZXRQQwoJICB3aXRoIFdpbmRvd3MgQ0UgZnJvbSBKYXZpZXIuCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogcmVvcmdhbmlzZWQsIHJlbW92ZWQgZHVwbGljYXRlIAoJICBkZWZpbml0aW9ucyBhbmQgYXBwbGllZCBXaW5DRSBwYXRjaCBmcm9tIEphdmllci4KCSogaW5jbHVkZS93c29ja2NvbXBhdC5oOiBuZXcgZmlsZSwgbm93IGNvbnRhaW5zIFdpblNvY2sKCSAgY29tcGF0aWJpbGl0eSBtYWNyb3MuCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IGludHJvZHVjZWQgZG91YmxlLXJ1biBjb21waWxhdGlvbi4KClRodSBTZXAgMjYgMTk6NDg6MDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIHJlbGVhc2UKCSAgb2YgMi40LjI1CgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWdlbmVyYXRlZCB0ZWggZG9jcyBhbmQgd2ViIHBhZ2VzLgoKVGh1IFNlcCAyNiAxNzozMzo0NiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBmaXhlZCBidWcgIzkyNTE4IHZhbGlkYXRpb24KCSAgZXJyb3Igd2VyZSBub3QgY292ZXJpbmcgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucy4KCSogcmVzdWx0L3ZhbGlkL2RpYS54bWwgdGVzdC92YWxpZC9kaWEueG1sOiB0aGUgdGVzdCB3YXNuJ3QgdmFsaWQsCgkgIGl0IHdhcyBtaXNzaW5nIHRoZSBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gZm9yIHRoZSBuYW1lc3BhY2UKCSogcmVzdWx0L1ZDL05TMzogdGhlIGZpeCBub3cgcmVwb3J0IGJyZWFrYWdlcyBpbiB0aGF0IHRlc3QKClRodSBTZXAgMjYgMTQ6Mzk6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGZpeGluZyBidWcgIzk0MjQxIG9uIEhUTUwgYm9vbGVhbiBhdHRyaWJ1dGVzCgpUaHUgU2VwIDI2IDE0OjI1OjMzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKjogYWRkZWQgdGhlIDMgbmV3IG1vZHVsZXMgeG1scmVnZXhwIHhtbGF1dG9tYXRhIGFuZCB4bWx1bmljb2RlCgkgIGFuZCByZWdlbmVyYXRlZCB0aGUgZG9jcyBhbmQgd2ViIHNpdGUKClRodSBTZXAgMjYgMTE6NDU6NDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jIHhwYXRoLmM6IG1ha2Ugc3VyZQoJICBBVFRSSUJVVEVfVU5VU0VEIGlzIGFsd2F5cyBwdXQgYWZ0ZXIgdGhlIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiwKCSAgbm90IGJlZm9yZQoKVGh1IFNlcCAyNiAxMTozMzoyOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dDogZml4ZWQgYSBzdHVwaWQgZXJyb3IKCSAgYnJlYWtpbmcgdGhlIHB5dGhvbiBBUEkKClRodSBTZXAgMjYgMDA6MzE6NDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyaW8uYyB0cmlvLmggdHJpb2RlZi5oIHRyaW9uYW4uYyB0cmlvbmFuLmggdHJpb3AuaAoJICB0cmlvc3RyLmMgdHJpb3N0ci5oOiBhcHBsaWVkIGEgdHJpbyB1cGRhdGUgcGF0Y2ggZnJvbSAKCSAgQmpvcm4gUmVlc2Ugd2hpY2ggc2hvdWxkIHdvcmsgd2l0aCBNaW5HVwoKVGh1IFNlcCAyNiAwMDoyMToxOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBpbXByb3Zpbmcgc29tZSBkb2N1bWVudGF0aW9uIGNvbW1lbnRzCgkqIHhtbHJlZ2V4cC5jOiBmb3VuZCBhbmQgZml4ZWQgYSBtZW0gbGVhayB3aXRoIHB5dGhvbiByZWdyZXNzaW9uIHRlc3RzCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2MgYW5kIHRoZSBBUEkgWE1MIGZpbGUgaW5jbHVkaW5nIHRoZSAKCSAgeG1scmVnZXhwLmggeG1sYXV0b21hdGEuaCBhbmQgeG1sdW5pY29kZS5oIGhlYWRlcnMKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dCBweXRob24vbGlieG1sX3dyYXAuaAoJICBweXRob24vdHlwZXMuYzogYWRkZWQgYWNjZXNzIHRvIHRoZSBYTUwgU2NoZW1hcyByZWdleHBzIGZyb20KCSAgcHl0aG9uCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvcmVnZXhwLnB5OiBhZGRlZCBhIAoJICBzaW1wbGUgcmVnZXhwIGJpbmRpbmdzIHRlc3QKClR1ZSBTZXAgMjQgMDg6MTA6NDggTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbDoKCSAgZml4aW5nIGZ0cCBsaW5rcyAtIHRoYW5rcyB0byBWaXRhbHkgT3N0YW5pbgoKVHVlIFNlcCAyNCAxNjowODoxNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmM6IGZpeGVkIHRoZSBkYXRhIGNhbGxiYWNrIG9uIHRyYW5zaXRpb24gZnVuY3Rpb25hbGl0eQoJICB3aGljaCB3YXMgYnJva2VuIHdoZW4gdXNpbmcgdGhlIGNvbXBhY3QgZm9ybQoJKiByZXN1bHQvc2NoZW1hcy8qOiB1cGRhdGVkIHRoZSByZXN1bHRzLCBsZXNzIHZlcmJvc2UsIGFsbCB0ZXN0cwoJICBwYXNzIGxpa2UgYmVmb3JlCgkqIERPQ0JwYXJzZXIuYyB0ZXN0QXV0b21hdGEuYyB0ZXN0QzE0Ti5jIHRlc3RTY2hlbWFzLmMgdGVzdFRocmVhZHMuYwoJICB0ZXN0WFBhdGguYyB2YWxpZC5jIHhpbmNsdWRlLmMgeG1sbGludC5jIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYwoJICB4bWxzY2hlbWFzdHlwZXMuYyB4cGF0aC5jIHB5dGhvbi9saWJ4bWwuYzogcmVtb3ZlZCBhIGJ1bmNoIG9mCgkgIGFubm95aW5nIHdhcm5pbmdzCgkqIHhwYXRoLmM6IHRyeSB0byBwcm92aWRlIGJldHRlciBlcnJvciByZXBvcnQgd2hlbiBwb3NzaWJsZQoKU2F0IFNlcCAyMSAxNDo1NjozNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGZpeGVkIGEgYnJlYWthZ2UgcmFpc2VkIGJ5IEphY29iCgpGcmkgU2VwIDIwIDIwOjA4OjE4IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogYWRkZWQgSEFWRV9FUlJOT19IIGRlZmluaXRpb24gZm9yIHBhcnRzCgkgIHdoaWNoIGRvbid0IHVzZSBzb2NrZXRzCgpGcmkgU2VwIDIwIDE4OjQwOjUwIENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IGFwcGxpZWQgemxpYiBwYXRjaCBmcm9tIERhbmllbCBHZWhyaWdlcgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFwcGxpZWQgemxpYiBwYXRjaCBmcm9tIERhbmllbCBHZWhyaWdlcgoKRnJpIFNlcCAyMCAxNTo0MDoxNCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IGFwcGxpZWQgdGhlIHBhdGNoIGZyb20gTWFyayBWYWtvYyBmb3IgCgkgIHJlZ2V4cCBzdXBwb3J0CgkqIHdpbjMyL2xpYnhtbDIuZGVmLnNyYzogYXBwbGllZCB0aGUgcGF0Y2ggZnJvbSBNYXJrIFZha29jCgkgIGZvciByZWdleHAgc3VwcG9ydAoKRnJpIFNlcCAyMCAxNTozNTozMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGFzIHBvaW50ZWQgYnkgSWdvciBGbG9hdCBhbmQgRG91YmxlCgkgIHBhcnNpbmcgYWluJ3QgZmluaXNoZWQgeWV0CgpGcmkgU2VwIDIwIDE0OjAwOjE2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IHRyeWluZyB0byBmaXggIzg4NDEyIGJ5IGJ5cGFzc2luZwoJICBhbGwgdGhlIHB5dGhvbiBzdWJkaXIgaWYgcHl0aG9uIGFpbid0IGRldGVjdGVkCgpUaHUgU2VwIDE5IDIxOjQ2OjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOgoJICBtYWRlIGNvbmZpZ3VyaW5nIHdpdGggcmVnZXhwcy9hdXRvbWF0YS91bmljb2RlIHRoZSBkZWZhdWx0CgkgIGJ1dCB3aXRob3V0IHNjaGVtYXMgQVRNCgkqIHRlc3RSZWdleHAuYyB2YWxpZC5jIHhtbHJlZ2V4cC5jIGluY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oOgoJICBmaXhlZCB0aGUgcmVnZXhwIGJhc2VkIERURCB2YWxpZGF0aW9uIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkKCSAgcHJvYmxlbSBieSBzd2l0Y2hpbmcgdG8gYSBjb21wYWN0IGZvcm0gZm9yIGRldGVybWluaXN0IHJlZ2V4cHMKCSAgYW5kIGRldGVjdGluZyB0aGUgZGV0ZXJtaW5pc20gcHJvcGVydHkgaW4gdGhlIHByb2Nlc3MuIFNlZW1zCgkgIGFzIGZhc3QgYXMgdGhlIG9sZCBEVEQgdmFsaWRhdGlvbiBzcGVjaWZpYyBlbmdpbmUgOi0pIGRlc3BpdGUKCSAgdGhlIHJlZ2V4cCBidWlsdCBhbmQgY29tcGFjdGlvbiBwcm9jZXNzLgoKV2VkIFNlcCAxOCAxODoyNzoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZGV0ZXJtaW5pc20gaXMgZGVidWdnZWQsIG5ldyBEVEQgY2hlY2tpbmcgY29kZSBub3cgd29ya3MKCSAgYnV0IHhtbEZBQ29tcHV0ZXNEZXRlcm1pbmlzbSB0YWtlcyBmYXIgdG9vIG11Y2ggQ1BVIGFuZCB0aGUgd2hvbGUKCSAgc2V0IHVzdWVzIHRvbyBtdWNoIG1lbW9yeSB0byBiZSByZWFsbHkgdXNhYmxlIGFzLWlzCgpXZWQgU2VwIDE4IDAwOjU0OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIGFub3RoZXIgc3R1cGlkIGJ1ZyBpbiB4bWxHZXROb2RlUGF0aCgpCgkqIHhtbGxpbnQuYzogLS12ZXJzaW9uIG5vdyByZXBvcnQgdGhlIG9wdGlvbnMgY29tcGlsZWQgaW4KClR1ZSBTZXAgMTcgMjM6NDg6MDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogc21hbGwgY2xlYW51cAoJKiB2YWxpZC5jIHhtbHJlZ2V4cC5jOiBzd2l0Y2hlZCBEVEQgdmFsaWRhdGlvbiB0byB1c2Ugb25seSByZWdleHAKCSAgd2hlbiBjb25maWd1cmVkIHdpdGggdGhlbS4gQSBiaXQgb2YgZGVidWdnaW5nIGFyb3VuZCB0aGUgZGV0ZXJtaW5pc20KCSAgY2hlY2tzIGlzIHN0aWxsIG5lZWRlZAoKVHVlIFNlcCAxNyAyMToyMjoyNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbF93cmFwLmg6IHN0dXBpZCBidWcgZm91bmQgYnkgbWF0dGFtQG5ldGNvdXJyaWVyLmNvbQoKVHVlIFNlcCAxNyAxOTo1ODoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogc21hbGwgcG9ydGFiaWxpdHkgZ2xpdGNoIGZpeGVkLgoKTW9uIFNlcCAxNyAxMjozODowOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hc3R5cGVzLmM6IGluY29tcGxldGUgc3RlcHMgZm9yIHJlYWwvZG91YmxlIHN1cHBvcnQKCSogdGVzdEF1dG9tYXRhLmMgaW5jbHVkZS9saWJ4bWwveG1sYXV0b21hdGEuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaDogYXZvaWRpbmcgYSBjb21waWxhdGlvbiBwcm9ibGVtCgkqIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogc3RhcnRpbmcgdGhlIHdvcmsgdG93YXJkIHVzaW5nCgkgIHRoZSByZWdleHBzIGZvciBhY3R1YWwgRFREIHZhbGlkYXRpb24KCkZyaSBTZXAgMTMgMTY6NDY6MTQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGhhc2guYzogY29zbWV0aWMgY2xlYW51cAoJKiB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3RyZWUuaCBpbmNsdWRlL2xpYnhtbC92YWxpZC5oOiBzdGFydGVkIAoJICBpbnRlZ3JhdGluZyBhIERURCB2YWxpZGF0aW9uIGxheWVyIGJhc2VkIG9uIHRoZSByZWdleHBzCgpUaHUgU2VwIDEyIDE4OjAxOjI5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxyZWdleHAuYyB4bWxzY2hlbWFzLmM6IGZpeGVkIGEgYnVnIHJlcG9ydGVkIGJ5IEplZmYgR29mZiwKCSAgdGhlIGRldGVybWluaXNtIHdhcyB0ZXN0ZWQgYmVmb3JlIGVsaW1pbmF0aW5nIHRoZSBlcHNpbG9uCgkgIHRyYW5zaXRpb25zIDotKAoKVGh1IFNlcCAxMiAxNjo1Nzo0NSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weQoJICBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCBweXRob24vbGlieG1sMmNsYXNzLnR4dAoJICBweXRob24vbGlieG1sX3dyYXAuaCBweXRob24vdHlwZXMuYzogdXBkYXRlZCB0aGUgcHl0aG9uCgkgIGJpbmRpbmdzLCBhZGRlZCBjb2RlIGZvciBlYXNpZXIgRmlsZSBJL08sIGFuZCB0aGUgYWJpbGl0eSB0bwoJICBkZWZpbmUgYSByZXNvbHZlciBmcm9tIFB5dGhvbiBmaXhpbmcgYnVnICM5MTYzNQoJKiBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL2luYnVmLnB5CgkgIHB5dGhvbi90ZXN0cy9vdXRidWYucHkgcHl0aG9uL3Rlc3RzL3B1c2hTQVhodG1sLnB5CgkgIHB5dGhvbi90ZXN0cy9yZXNvbHZlci5weSBweXRob24vdGVzdHMvc2VyaWFsaXplLnB5OiB1cGRhdGVkCgkgIGFuZCBhdWdtZW50ZWQgdGhlIHNldCBvZiBQeXRob24gdGVzdHMuCgpUdWUgU2VwIDEwIDIxOjA1OjI4IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aWdvckBzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogYWRkZWQgbW9yZSByZWFkbWUgaW5mbyBmb3IgdGhlIGJpbmFyeQoJICBwYWNrYWdlLgoKVHVlIFNlcCAxMCAxNDoxNToxOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogZml4ZWQgYSBzdHVwaWQgb3V0IG9mIGJvdW5kIGFycmF5IGVycm9yCgpUdWUgU2VwIDEwIDEzOjA5OjE0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oIHhtbElPLmMgcGFyc2VyLmMgSFRNTHBhcnNlci5jIERPQ0JwYXJzZXIuYzoKCSAgbWVzc2luZyBhcm91bmQgd2l0aCBzdXBwb3J0IGZvciBXaW5kb3dzIHBhdGgsIGNsZWFudXBzLAoJICB0cnlpbmcgdG8gaWRlbnRpZnkgYW5kIGZpeCB0aGUgdmFyaW91cyBjb2RlIHBhdGggdG8gdGhlCgkgIGZpbGVuYW1lIGFjY2Vzcy4gQWRkZWQgeG1sTm9ybWFsaXplV2luZG93c1BhdGgoKQoKVGh1IFNlcCAgNSAxNjoxOToxOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXJyb3IuYyB2YWxpZC5jOiB3b3JraW5nIG9uIGJldHRlciBlcnJvciByZXBvcnRpbmcgb2YgdmFsaWRpdHkKCSAgZXJyb3JzLCBlc3BlY2lhbGx5IHByb3ZpZGluZyBhbiBhY2N1cmF0ZSBjb250ZXh0LgoJKiByZXN1bHQvdmFsaWQveGxpbmsueG1sLmVyciByZXN1bHQvdmFsaWQvcnNzLnhtbC5lcnI6IGJldHRlcgoJICBlcnJvciByZXBvcnRzIGluIHRob3NlIGNhc2VzLgoKVGh1IFNlcCAgNSAxMzoyOTo0NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogRE9DQnBhcnNlci5jIEhUTUxwYXJzZXIuYyBjMTRuLmMgZW50aXRpZXMuYyBsaXN0LmMKCSAgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgeG1sSU8uYzogZ2V0IHJpZCBvZiBhbGwgdGhlIAoJICBwZXJyb3IoKSBjYWxscyBtYWRlIGluIHRoZSBsaWJyYXJ5IGV4ZWN1dGlvbiBwYXRocy4gVGhpcwoJICBzaG91bGQgZml4IGJvdGggIzkyMDU5IGFuZCAjOTIzODUKClRodSBTZXAgIDUgMTM6MTM6MTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogbWVtb3J5IGxlYWsgcmVwb3J0aW5nIHdhcyBicm9rZW4gYWZ0ZXIgYSBjaGFuZ2UKCSAgb2YgdGhlIHByZXByb2Nlc3NvciBzeW1ib2wgdXNlZCB0byBhY3RpdmF0ZSBpdC4KClRodSBTZXAgIDUgMTM6MTA6NTcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogdHJ5IHRvIG1ha2UgdGhlIGNvcHkgZnVuY3Rpb24gd29yayBmb3Igbm9kZSBvZgoJICB0eXBlIFhNTF9ET0NVTUVOVF9GUkFHX05PREUsIHRoZXkgYXJlIG9ubHkgY3JlYXRlZCBieSB0aGUKCSAgRE9NIGxheWVycyB0aG91Z2gsIG5vdCBsaWJ4bWwyIGl0c2VsZi4KClRodSBTZXAgIDUgMTI6NTc6MzggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IHRyeSB0byBwcm92aWRlIGZpbGUgYW5kIGxpbmUgaW5mb3JtYXRpb25zLCBub3QgYWxsCgkgIG1lc3NhZ2VzIGFyZSBjb3ZlcmVkLCBidXQgaXQncyBhIChnb29kKSBzdGFydAoKVGh1IFNlcCAgNSAxMjo0OTozNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeGluY2x1ZGUuYzogcmVpbXBsZW1lbnRlZCBhIGxhcmdlIHBhcnQgb2YgdGhlIFhJbmNsdWRlCgkgIHByb2Nlc3NvciwgdHJ5aW5nIHRvIG1pbmltaXplIHJlc291cmNlcyB1c2VkLCBKYW1lcyBIZW5zdHJpZGdlCgkgIHByb3ZpZGVkIGEgaHVnZSB0ZXN0IGNhc2Ugd2hpY2ggd2FzIGV4aGliaXRpbmcgc2V2ZXJlIG1lbW9yeQoJICBjb25zdW1wdGlvbiBwcm9ibGVtcy4KClRodSBTZXAgIDUgMTA6MDc6MTMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogYXBwbGllZCBwYXRjaCBmcm9tIENocmlzdG9waGUgTWVybGV0IHRvCgkgIHJlZXN0YWJsaXNoIERFU1RESVIKCldlZCBTZXAgIDQgMTQ6MTM6MzQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlcyBsaWJhcnkgcGF0aCBmb3IgeDg2XzY0IEFNRAoKVHVlIFNlcCAgMyAyMToxNDoxOSBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVrZXl3b3JkLmMKCSogZG9jL3R1dG9yaWFsL3htbHR1dG9yaWFsLnhtbDoKCShwbHVzIHJlc3VsdGluZyBnZW5lcmF0ZWQgaHRtbCBmaWxlcykKCWZpeGluZyBvbmUgc3BvdCBJIG1pc3NlZCBpbiB0aGUgdHV0b3JpYWwgd2hlcmUgSSBoYWRuJ3QgZnJlZWQKCW1lbW9yeSBwcm9wZXJseQoKU2F0IEF1ZyAzMSAxOTozMToxNyBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVhZGRhdHRyaWJ1dGUuYwoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWFkZGtleXdvcmQuYwoJKiBkb2MvdHV0b3JpYWwvaW5jbHVkZWdldGF0dHJpYnV0ZS5jCgkqIGRvYy90dXRvcmlhbC9pbmNsdWRla2V5d29yZC5jCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwKCSogZG9jL3R1dG9yaWFsLyouaHRtbDoKCXVwZGF0ZSB0dXRvcmlhbCB0byBwcm9wZXJseSBmcmVlIG1lbW9yeSAodGhhbmtzIHRvIENocmlzdG9waGVyCglSLiBIYXJyaXMgZm9yIHBvaW50aW5nIG91dCB0aGF0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSkKCSogZG9jL3R1dG9yaWFsL2ltYWdlcy9jYWxsb3V0cy8qLnBuZzoKCWFkZGVkIGltYWdlIGZpbGVzIHNvIHRoZSBjYWxsb3V0cyBhcmUgZ3JhcGhpY2FsLCBtYWtpbmcgaXQKCWVhc2llciB0byByZWFkICggdXNlICItLXBhcmFtIGNhbGxvdXQuZ3JhcGhpY3MgMSIgdG8gZ2VuZXJhdGUKCWh0bWwgd2l0aCBncmFwaGljYWwgY2FsbG91dHMpCgpXZWQgQXVnIDI4IDEzOjQ0OjU0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTGlieG1sMi1Mb2dvLTE4MHgxNjguZ2lmIGRvYy9MaWJ4bWwyLUxvZ28tOTB4MzQuZ2lmOgoJICBuaWNlIGxvZ29zIGdlbmVyYXRlZCBieSBNYXJjIExpeWFuYWdlCgkqIGRvYy9zaXRlLnhzbCAqLmh0bWw6IGNoYW5nZWQgdGhlIHN0eWxlc2hlZXQgdG8gc2hvdyB0aGUgbmV3CgkgIGxvZ28gYW5kIHJlZ2VuZXJhdGVkIHRoZSBwYWdlcwoKU3VuIEF1ZyAyNSAxNjozODowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogaGFuZGxlIFdpbmRvd3Mgc2VwZWNpZmljIGZpbGU6Ly9sb2NhbGhvc3QvIHNlbWFudGljIC4uLgoKVGh1IEF1ZyAyMiAyMjowMzoxOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcG9zc2libGUgbWVtIGxlYWsgcGF0Y2ggZnJvbSBKYXNvbiBBZGFtcwoKVGh1IEF1ZyAyMiAxNzoyNzozMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogaW50ZWdyYXRlZCB4Zjplc2NhcGUtdXJpKCkgZnJvbSBXZXNsZXkgVGVycHN0cmEKCSAgaW4gdGhlIFhRdWVyeSBuYW1lc3BhY2UKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjI0CgkqIGRvYy8qLmh0bWw6IHVwZGF0ZWQgdGhlIHdlYiBwYWdlcwoKVGh1IEF1ZyAyMiAxNjoxOTo0MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weTogY2xvc2luZyBidWcgIzg1MjU4IGJ5IGdlbmVyYXRpbmcgY29uZGl0aW9uYWwKCSAgY29tcGlsZSBjaGVjayB0byBhdm9pZCBsaW5raW5nIHRvIHJvdXRpbmVzIG5vdCBjb25maWd1cmVkIGluLgoKMjAwMi0wOC0yMiAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHBvYm94LmNvbT4KCgkqIGF1dG9nZW4uc2g6IHVwZGF0ZSBlcnJvciBtZXNzYWdlIGZvciBtaXNzaW5nIGF1dG9tYWtlCgpUaHUgQXVnIDIyIDExOjQ1OjUwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IHR5cG8gaW4gdGFyZ2V0IG5hbWUgcmVzdWx0ZWQgaW4gbGlieG1sMi5weQoJICB0byBub3QgYmUgcmVidWlsdC4gZml4ZWQgREVTVERJUiBzaW1pbGFyeSB0byB0aGUgbGlieHNsdCBvbmUuCgpUaHUgQXVnIDIyIDA5OjE1OjAwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi93aW4zMi9NYWtlZmlsZS5taW5ndzogdXBkYXRlZCB3aXRoIHZlcnNpb24gZnJvbSAKCSAgRWxpemFiZXRoIEJhcmhhbSBhdCBodHRwOi8vc29nZ3l0cm91c2Vycy5uZXQvcmVwb3NpdG9yeS8KClR1ZSBBdWcgMjAgMTY6NDA6NDggQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogd2luMzIvTWFrZWZpbGUubXN2YzogYWRkZWQgdGhlIHByZWZpeCBsb2NhdGlvbiB0byB0aGUgaW5jbHVkZQoJYW5kIGxpYiBzZWFyY2ggcGF0aC4KCjIwMDItMDgtMTggIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBhdXRvZ2VuLnNoOiBoYXJkY29kZSBhY2xvY2FsLTEuNC9hdXRvbWFrZS0xLjQgc28gdGhhdCB1c2VycyB3aXRoCglib3RoIGF1dG9tYWtlIDEuNiBhbmQgMS40IGluc3RhbGxlZCBnZXQgdGhlIHJpZ2h0IGF1dG9tYWtlLiBNZWFucwoJY29tcGlsYXRpb24gZnJvbSBDVlMgd2lsbCBub3cgcmVxdWlyZSB0aGUgbGF0ZXN0IGF1dG9tYWtlIDEuNAoJcmVsZWFzZSwgb3IgbWFudWFsbHkgY3JlYXRpbmcgc3ltbGlua3MgY2FsbGVkICJhdXRvbWFrZS0xLjQiIGFuZAoJImFjbG9jYWwtMS40IgoKV2VkIEF1ZyAxNCAxODo1NDoxOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIHB5dGhvbi9NYWtlZmlsZS5hbTogbW9yZSBBTUQgNjQgaW5kdWNlZCBjaGFuZ2VzIGZyb20KCSAgRnJlZGVyaWMgQ3JvemF0CgpXZWQgQXVnIDE0IDE2OjQzOjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4aW5jbHVkZS5jOiBvb3BzIEkgd2FzIG1pc3NpbmcgdGhlIHhtbDpiYXNlIGZpeHVwIHRvbwoJKiByZXN1bHQvWEluY2x1ZGUvKi54bWw6IHRoaXMgYWRkcyB4bWw6YmFzZSBhdHRyaWJ1dGVzIHRvIG1vc3QKCSAgcmVzdWx0cyBvZiB0aGUgdGVzdHMKCldlZCBBdWcgMTQgMTY6MDU6MzcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhpbmNsdWRlLmM6IHF1aWNrIGJ1dCBhcHBhcmVudGx5IHdvcmtpbmcgaW1wbGVtZW50YXRpb24gb2YKCSAgeGk6ZmFsbGJhY2ssIHNob3VsZCBjbG9zZSBidWcgIzg5Njg0CgkqIE1ha2VmaWxlLmFtIHRlc3QvWEluY2x1ZGUvZG9jcy9mYWxsYmFjay54bWwgCgkgIHJlc3VsdC9YSW5jbHVkZS9mYWxsYmFjay54bWw6IGFkZGVkIGEgYmFzaWMgdGVzdCBmb3IgZmFsbGJhY2ssCgkgIGFuZCBydW4gd2l0aCAtLW5vd2FybmluZyB0byBhdm9pZCBhIHNwdXJpb3VzIHdhcm5pbmcKCSogY29uZmlndXJlLmluOiBhcHBsaWVkIHBhdGNoIGZyb20gRnJlZGVyaWMgQ3JvemF0IGZvciBweXRob24KCSAgYmluZGluZ3Mgb24gQU1EIDY0Yml0cyBtYWNoaW5lcy4KCldlZCBBdWcgMTQgMTA6NDc6NDYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiB4bWxTQVhVc2VyUGFyc2VNZW1vcnkoKSByZWFsbHkgb3VnaHQgdG8gZmFpbCBpZgoJICB0aGUgY2FsbGVyIGRvbid0IHBhc3MgYSBTQVggY2FsbGJhY2sgYmxvY2suCgpXZWQgQXVnIDE0IDEwOjI5OjAyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGxpZWQgdGhlIHNhbWUgZml4IGZvciB0aGUgWE1MLTEuMCBuYW1lc3BhY2UgdG8KCSAgeG1sU2VhcmNoTnNCeUhyZWYoKSBhcyB3YXMgZG9uZSBmb3IgeG1sU2VhcmNoTnMoKQoKTW9uIEF1ZyAxMiAxNjo1MjowOCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLjM6IHNtYWxsIGNsZWFudXAgb2YgdGhlIG1hbiBwYWdlCgkqIEhUTUx0cmVlLmM6IGZpeGVkIGEgcG90ZW50aWFsIHByb2JsZW0gcmFpc2VkIGJ5IFBldHIgVmFuZHJvdmVjCgkgIHdoZW4gc2VyaWFsaXppbmcgSFJFRiBhdHRyaWJ1dGVzIGdlbmVyYXRlZCBieSBYU0xULgoKTW9uIEF1ZyAxMiAxNToyNDowNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1MdHJlZS5oOiBpbnRlZ3JhdGVkIGEgY2xlYW5lZCB1cAoJICB2ZXJzaW9uIG9mIE1hcmMgTGl5YW5hZ2UnIHBhdGNoIGZvciBib29sZWFuIGF0dHJpYnV0ZXMgaW4gSFRNTAoJICBvdXRwdXQKCk1vbiBBdWcgMTIgMTQ6MTE6NTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi90ZXN0cy9zZXJpYWxpemUucHk6IGZpeGVkIHRoZSB0ZXN0IHJlc3VsdHMsIGluZGVudGluZwoJICBiZWhhdmlvdXIgY2hhbmdlZCBzbGlnaHRseQoKVGh1IEF1ZyAgOCAxMTowMDoyNiAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMgd2luMzIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZAoJbmV3IGMxNG4gZnVuY3Rpb24gdG8gV2luZG93cyBkZWYgZmlsZXMKCkZyaSBBdWcgIDIgMTY6NDY6NDYgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBjMTRuLmM6IGZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gYzE0biBjb2RlCgpTYXQgQXVnICAzIDAwOjE1OjA2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogYWRkaW5nIGEgbmV3IEFQSSBmb3IgQ2hyaXN0aWFuCgkgIEdsYWhuOiB4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnlSZWNvdmVyCgkqIHZhbGlkLmM6IHBhdGNoIGZyb20gUmljayBKb25lcyBmb3Igc29tZSBncmFtbWFyIGNsZWFudXAgaW4KCSAgdmFsaWRhdGlvbiBtZXNzYWdlcwoJKiByZXN1bHQvVkMvKiByZXN1bHQvdmFsaWQvKjogdGhpcyBzbGlnaHRseSBjaGFuZ2Ugc29tZSBvZiB0aGUKCSAgcmVncmVzc2lvbiB0ZXN0cyBvdXRwdXRzCgpUaHUgQXVnICAxIDE0OjUwOjI4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHRyeWluZyB0byBmaXggYSBwcm9ibGVtIGluIG5hbWVzcGFjZWQgYXR0cmlidXRlIGhhbmRsaW5nCgkgIHJhaXNlZCBieSBDaHJpc3RpYW4gR2xhaG4KClRodSBBdWcgIDEgMTI6MTc6MzAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaDogT3BlbmluZyB0aGUgaW50ZXJmYWNlCgkgIHhtbE5ld0NoYXJFbmNvZGluZ0hhbmRsZXIgYXMgcmVxdWVzdGVkIGluICM4OTQxNQoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9zZXR1cC5weS5pbjogYXBwbGllZCBjbGVhbnVwCgkgIHBhdGNoZXMgZnJvbSBNYXJjLUFuZHJlIExlbWJ1cmcKCSogdHJlZS5jOiBmaXhpbmcgYnVnICM4OTMzMiBvbiBhIHNwZWNpZmljIGNhc2Ugb2YgbG9vc2luZyAKCSAgdGhlIFhNTC0xLjAgbmFtZXNwYWNlIG9uIHhtbDp4eHggYXR0cmlidXRlcwoKV2VkIEp1bCAzMSAyMzoyNzo0MiAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGMxNG4uYyBpbmNsdWRlL2xpYnhtbC9jMTRuLmg6IGZpeGVkIG9uZSBtb3JlIGMxNG4gKyBuYW1lc3BhY2VzCgljb3JuZXIgY2FzZSBmcm9tIG5ldyBNZXJsaW4ncyB0ZXN0IHN1aXRlIGFuZCBhZGRlZCBhIGNhbGxiYWNrCgl0aGF0IHdpbGwgYmUgdXNlZCB0byBpbXByb3ZlIHhtbHNlYyBwZXJmb3JtYW5jZQoKTW9uIEp1bCAyOSAxODoyMjowMCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogdHJ5aW5nIHRvIGZpeCB0aGUgPHN0eWxlPiBlc2NhcGluZyBwcm9ibGVtIGluCgkgIEhUTUwgc2VyaWFsaXphdGlvbiBidWcgIzg5MzQyCgpUaHUgSnVsIDI1IDAxOjMzOjQ3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MveG1sLmh0bWwgZG9jLyouaHRtbDogYXBwbGllZCBzeW50YXggcGF0Y2ggZnJvbSBSaWNrIEpvbmVzCgkgIGFuZCByZWJ1aWx0IHRoZSB3ZWIgc2l0ZS4KCk1vbiBKdWwgMjIgMTE6MDQ6NDggUERUIDIwMDIgIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IGFkZGVkIF9wcml2YXRlIG1lbWJlciB0byB4bWxOcyBzdHJ1Y3QKClN1biBKdWwgMjEgMTc6NDg6NDcgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4aW5nIGJ1ZyAjODQ4NzYgYmFzZWQgb24gdGhlIHhtbCB3b3JraW5nCgkgIGNvZGUuCgpTdW4gSnVsIDIxIDE5OjE1OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBlbmhhbmNlZCB0byBmaXggYnVnIDcyMDEyIChlcnJvcnMKCSAgd2hlbiB1c2luZyAnLWpYJyBtYWtlIHBhcmFtZXRlcikKCkZyaSBKdWwgMTkgMTY6MzU6MDAgSEtUIDIwMDIgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiB4cGF0aC5jOiBzbWFsbCBhZGRpdGlvbmFsIGVuaGFuY2VtZW50IGZvciBib29sZWFucwoJICBjb21wYXJlZCB0byBub2Rlc2V0cwoKV2VkIEp1bCAxNyAxOTo0ODoxNCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYzogY2hhbmdlZCB0aGUgb3JkZXIgb2YgdGhlIGVuY29kaW5nIGRlY2xhcmF0aW9uCgkgIGF0dHJpYnV0ZXMgaW4gdGhlIG1ldGEgdGFncyBkdWUgdG8gYSBidWcgaW4gSUUvTWFjCgpGcmkgSnVsIDEyIDA4OjQ1OjAwIEhLVCAyMDAyIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogeHBhdGguYzogZW5oYW5jZWQgaGFuZGxpbmcgb2YgYm9vbGVhbnMgKGVzcGVjaWFsbHkgJz0nCgkgIGFuZCAnIT0nIGZvciBub2Rlc2V0cykgLSBmaXhlcyBidWcgODUyNTYuICBBZGRlZCBuZXcKCSAgcm91dGluZSB4bWxYUGF0aE5vdEVxdWFsVmFsdWVzIGZvciBtb3JlIHByb3BlciBoYW5kbGluZwoJICBvZiAnIT0nIHdoZW4gbm9kZXNldHMgYXJlIGludm9sdmVkLgoKVGh1IEp1bCAxMSAyMTo0NTo1MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL01ha2VmaWxlLmFtOiBmaXhpbmcgUmVkIEhhdCBidWcgIzY4NjE0IGJ5IGFkZGluZyB0aGUKCSAgZG9jL3htbGNhdGFsb2dfbWFuLnhtbCB0byB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbgoKV2VkIEp1bCAxMCAyMToyNjoxMyBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9NYWtlZmlsZS5tc3ZjOiBBZGRlZCBhIGNvcHkgKi5wZGIgdG8gaW5zdGFsbCwgZmV3IGhhdmUKCSAgYXNrZWQgZm9yIHRoaXMuCgpTYXQgSnVsICA2IDIxOjU1OjU5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjMKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3MKClNhdCBKdWwgIDYgMjE6MTE6MjAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhpbmcgYnVnICM4NDE2OSBieSBmaXhpbmcgdGhlCgkgIGNvbW1lbnQgb2YgeG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQgdG8gZGVzY3JpYmUgdGhlIAoJICBlbmNvZGluZyBkZXRlY3Rpb24gcGFyYW1ldGVycyBiZXR0ZXIuCgpTYXQgSnVsICA2IDE5OjQ0OjU2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhpbmcgYnVnICM3OTMzMSBpbiBvbmUgcGF0aCB0aGUgbG9va3VwIGZvcgoJICBJRCBhdHRyaWJ1dGVzIG9uIGEgbmFtZXNwYWNlZCBub2RlIHdhc24ndCBoYW5kbGVkIGNvcnJlY3RseSA6LVwKCkZyaSBKdWwgIDUgMjA6MDc6NDMgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogdHJ5aW5nIHRvIGZpeCA4NzIzNSBhYm91dCBkaXNjYXJkZWQgd2hpdGUKCSAgc3BhY2VzIGluIHRoZSBIVE1MIHBhcnNlci4KCSogcmVzdWx0L0hUTUwvKjogdGhpcyBjaGFuZ2VzIHRoZSBvdXRwdXQgb2YgYSBudW1iZXIgb2YgSFRNTAoJICByZWdyZXNzaW9uIHRlc3RzCgpNb24gSnVsICAxIDIzOjIzOjQxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBhcHBsaWVkIHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyBmb3IgdGhlIG5hbWVzcGFjZQoJICBheGlzICsgZml4ZWQgYSBtZW1vcnkgZXJyb3IuCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBhcHBsaWVkIHBhdGNoZXMgZnJvbSBQZXRlciBKYWNvYmkKCSAgcmVtb3ZpbmcgY3R4dC0+dG9rZW4gZm9yIGdvb2QuCgkqIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYzogZml4ZWQgYSBmZXcgbWVtb3J5IGxlYWtzCgkgIHBvcHBlZCBvdXQgYnkgdGhlIHJlZ3Jlc3Npb24gdGVzdHMuCgkqIE1ha2VmaWxlLmFtOiBwYXRjaCBmb3IgdGhyZWFkcyBtYWtlZmlsZSBmcm9tIEdhcnkgUGVubmluZ3RvbgoKRnJpIEp1biAyOCAxOTozODowMCBIS1QgMjAwMiBXaWxsaWFtIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KCgkqIHhwYXRoLmM6IGVuaGFuY2VkIGJlaGF2aW91ciBvZiBwb3NpdGlvbigpIGFmdGVyIHVzYWdlIG9mCgkgIGV4cHJlc3Npb25zIGludm9sdmluZyBwcmVjZWRpbmctc2libGluZyAoZXQgYWwpLgoKVHVlIEp1biAxOCAwOTo1ODo0OCBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaGFzaC5jOiBhcHBsaWVkIGEgcGF0Y2ggZnJvbSBQZXRlciBKYWNvYmkgdG8gc29sdmUgYSBwcm9ibGVtCgkgIHdoZW4gY29tcGlsaW5nIHdpdGggdGhlIFdhdGNvbSBDIG9uIFdpbjMyIAoJKiByZXN1bHQvc2NoZW1hcy8qLmVycjogdGhlIGNoYW5nZSBvZiBoYXNoaW5nIGFsZ28gZ2VuZXJhdGVkCgkgIHBlcm11dGF0aW9ucyBpbiB0aGUgb3V0cHV0CgpNb24gSnVuIDE3IDE5OjAyOjQ5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBoYXNoLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBTYW5kZXIgVmVzaWsgaW1wcm92aW5nIHRoZSBxdWFsaXR5IG9mCgkgIHRoZSBoYXNoIGZ1bmN0aW9uLgoKMjAwMi0wNi0xNCAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jIGRlYnVnWE1MLmMgZW5jb2RpbmcuYwoJbmFub2Z0cC5jIG5hbm9odHRwLmMgcGFyc2VyLmMgdHJlZS5jIHVyaS5jIHhtbElPLmMKCXhtbGxpbnQuYyB4cGF0aC5jOiByZXBsYWNlZCBzcHJpbnRmKCkgd2l0aCBzbnByaW50ZigpCgl0byBwcmV2ZW50IHBvc3NpYmxlIGJ1ZmZlciBvdmVyZmxvdyAodGhlIGJ1ZyB3YXMgcG9pbnRlZAoJb3V0IGJ5IEFuanUgUHJlbWFjaGFuZHJhbikgCgpUaHUgSnVuIDEzIDE3OjMwOjI1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcmVtb3ZlZCBhbiB1bmluaXRpYWxpemVkIGRhdGEgZXJyb3IgcG9wcGVkIGJ5IHZhbGdyaW5kCgkgIG9uIFBFIHJlZmVyZW5jZXMKCldlZCBKdW4gMTIgMjE6Mzg6NDYgTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWwuaHRtbAoJYWRkaW5nIHR1dG9yaWFsIHJlZmVyZW5jZSB0byB0aGUgd2ViIHBhZ2UKCldlZCBKdW4gMTIgMjE6MjY6MDggTURUIDIwMDIgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy90dXRvcmlhbC94bWx0dXRvcmlhbC54bWwKCSogZG9jL3R1dG9yaWFsL2FyMDFzMDcuaHRtbAoJKiBkb2MvdHV0b3JpYWwvYXBlLmh0bWwKCSogZG9jL3R1dG9yaWFsL2luY2x1ZGVnZXRhdHRyaWJ1dGUuYwoJYWRkaW5nIHNlY3Rpb24gdG8gdHV0b3JpYWwgYWJvdXQgcmV0cmlldmluZyBhbiBhdHRyaWJ1dGUKCXZhbHVlCgpUdWUgSnVuIDExIDEyOjA3OjA0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogYXBwbGllZCBhIGNvdXBsZSBvZiBwYXRjaGVzIGZyb20gUGV0ZXIgSmFjb2JpIHRvIHN0YXJ0CgkgIHRvIGdldCByaWQgb2YgY3R4dC0+dG9rZW4sIHdpdGggYSBwb3NzaWJsZSBzaWduaWZpY2FudCBzcGVlZAoJICBpbXByb3ZlbWVudCB0byBiZSBnYWluZWQgb25jZSBkb25lLiBCZXR0ZXIgY29tcGxpYW5jZSB3aXRoIFBFCgkgIHJlZmVyZW5jZXMgY29uc3RydWN0cyBpbiBEVERzIHRvby4KCSogdGVzdC92YWxpZC90WzAtOV0qIHJlc3VsdC92YWxpZC90WzAtOV0qOiBhZGRlZCBhIHNldCBvZiB0ZXN0cwoJICBmcm9tIFBldGVyIHRvbwoKVHVlIEp1biAxMSAwOToyNToxMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IEJhYmFrIFZhaGVkaXBvdXItS3VuemUgcmVwb3J0ZWQgdGhhdCBvcGVuVGFnIGluIAoJICB4bWxQYXJzZUVsZW1lbnQgd2FzIGxpa2VseSB0byBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQgYXQgdGhlCgkgIHRpbWUgb2YgdGhlIHJlcG9ydCwgcG9zc2libHkgbGVhZGluZyB0byBzZWdmYXVsdC4gSnVzdCByZXBvcnQKCSAgdGhlIHRhZyBuYW1lIG5vdy4KCk1vbiBKdW4gMTAgMTg6MDA6MDIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyBmb3IgWFBhdGggc3Vic3RyaW5nKCkgZnVuY3Rpb24KCSogcmVzdWx0L1hQYXRoL2V4cHIvc3RyaW5ncyB0ZXN0L1hQYXRoL2V4cHIvc3RyaW5nczogbmV3IHNldCBvZiB0ZXN0cwoKMjAwMi0wNi0wNiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiB4bWxJTy5jOiBwYXRjaCBmcm9tIFJhY2hlbCBIZXN0aWxvdyB0byBmaXggYnVnICM4NDM0MAoKV2VkIEp1biAgNSAxOToxNDo0OSBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSpkb2MvRkFRLmh0bWwKCWZpeGluZyB0eXBvcyBpbiBGQVEsIHRoYW5rcyB0byBSb2JlcnQgRnVubmVsbCBmb3IgdGhlCgllZGl0aW5nIGhlbHAKCldlZCBKdW4gIDUgMTQ6NTA6MjQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE5FV1M6IGdvdCBjb21wbGFpbnRzIGZyb20gcnBtbGludCB0aGF0IGl0IHdhcyBlbXB0eQoKVHVlIEp1biAgNCAwOTowOToxOCBNRFQgMjAwMiBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogYWRkZWQgZG9jL3R1dG9yaWFsLCBpbmNsdWRpbmc6CglhcGEuaHRtbAoJYXBiLmh0bWwKCWFwYy5odG1sCglhcGQuaHRtbAoJYXIwMXMwMi5odG1sCglhcjAxczAzLmh0bWwKCWFyMDFzMDQuaHRtbAoJYXIwMXMwNS5odG1sCglhcjAxczA2Lmh0bWwKCWluY2x1ZGVhZGRhdHRyaWJ1dGUuYwoJaW5jbHVkZWFkZGtleXdvcmQuYwoJaW5jbHVkZWtleXdvcmQuYwoJaW5jbHVkZXN0b3J5LnhtbAoJaW5kZXguaHRtbAoJeG1sdHV0b3JpYWwueG1sCglsaWJ4bWwgdHV0b3JpYWwsIGluY2x1ZGluZyBnZW5lcmF0ZWQgaHRtbAoKTW9uIEp1biAgMyAyMToyMToyNiAyMDAyICBBbGVrc2V5IFNhbmluICA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIHJlc3VsdC9jMTRuL2V4Yy13aXRob3V0LWNvbW1lbnRzL21lcmxpbi1jMTRuLXR3by0qCgkgIHJlc3VsdC9jMTRuL3dpdGhvdXQtY29tbWVudHMvbWVybGluLWMxNG4tdHdvLSoKCSAgdGVzdC9jMTRuL2V4Yy13aXRob3V0LWNvbW1lbnRzL21lcmxpbi1jMTRuLXR3by0qCgkgIHRlc3QvYzE0bi93aXRob3V0LWNvbW1lbnRzL21lcmxpbi1jMTRuLXR3by0qCgkgIHRlc3RDMTROLmMgTWFrZWZpbGUuYW06IGFkZGVkIG1lcmxpbi1jMTRuLXR3by50YXIuZ3ogdGVzdHMgZm9yIAoJYzE0bi9leGMtYzE0biBhbmQgc2xpZ2h0bHkgbW9kaWZpZWQgdGVzdCBzY3JpcHQgdG8gaGFuZGxlCgl0aGVzZSB0ZXN0IGNhc2VzCgkqIGMxNG4uYzogZml4ZWQgYnVncyBmb3IgY29tcGxpY2F0ZWQgbm9kZXMgc2V0IChuYW1lc3BhY2UKCXdpdGhvdXQgbm9kZSBhbmQgb3RoZXJzIGZyb20gbWVybGluLWMxNG4tdHdvLnRhci5neikKCSogaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaCB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjCgl3aW4zMi9saWJ4bWwyLmRlZi5zcmM6ICJvcGVuZWQiIHhtbFhQYXRoTm9kZVNldEZyZWVOcygpIGZ1bmN0aW9uCglmb3IgeG1sc2VjIHBlcmZvcm1hbmNlIHBhdGNoCgkqIHhwYXRoLmM6IGZpeGVkIHNlbGY6Om5vZGUoKSBmb3IgbmFtZXNwYWNlcyBhbmQgYXR0cmlidXRlcwoKTW9uIEp1biAwMyAwMDowNDoyMSAyMDAyIENoZW1hIENlbG9yaW8gPGNoZW1hQHhpbWlhbi5jb20+CgoJKiB0cmVlLmg6IGFkZGVkIHhtbERvY0Zvcm1hdER1bXAgd2hpY2ggaXMganVzdCBhcyB4bWxEb2NEdW1wCgkgIGJ1dCB3aXRoIHRoZSBmb3JtYXQgcGFyYW1ldGVyCgkqIHRyZWUuYzogbWFkZSB4bWxEb2NEdW1wIGEgd3JhcHBlciBhcnJvdW5kIHhtbERvY0Zvcm1hdER1bXAKCkZyaSBNYXkgMzEgMTI6MTY6NDggMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBNYWtlZmlsZS5hbTogdXBkYXRlZCBjMTRuIHRlc3RzIHN1aXRlCgkqIGMxNG4uYzogcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIHByZXZpb3VzIGMxNG4gcGF0Y2gKCkZyaSBNYXkgMzEgMTE6NDc6MTIgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBhbm90aGVyIHBlcm9mb3JtYW5jZSBwYXRjaCBmcm9tIFBldGVyIEphY29iaSwgdGhhdAoJICB0aW1lIG9uIHBhcnNpbmcgYXR0cmlidXRlIHZhbHVlcy4KClRodSBNYXkgMzAgMjM6MzQ6MjcgMjAwMiAgQWxla3NleSBTYW5pbiAgPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBNYWtlZmlsZS5hbSByZXN1bHQvYzE0bi8qIHRlc3QvYzE0bi8qOiBDMTROIHRlc3RzIGludGVncmF0ZWQKCWludG8gTGliWE1MMiB0ZXN0IHN1aXRlCgpUaHUgTWF5IDMwIDIxOjIzOjA2IDIwMDIgIEFsZWtzZXkgU2FuaW4gIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogYzE0bi5jOiBwcm9wYWdhdGluZyB4cGF0aCBhbmNlc3N0b3JzIG5vZGUgZml4IHRvIGMxNG4KCXBsdXMgc21hbGwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgdG8gcmVkdWNlIG51bWJlciBvZgoJbWFsbG9jcwoJKiB4cGF0aC5jOiBmaXhlZCBhbmNlc3RvcnMgYXhpcyBwcm9jZXNzaW5nIGZvciBuYW1lc3BhY2Ugbm9kZXMKCldlZCBNYXkgMjkgMTA6MjE6MzkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHBhcnNlci5jIHRyZWUuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHBlcmZvcm1hbmNlIHBhdGNoIGZyb20KCSAgUGV0ZXIgSmFjb2JpCgpNb24gTWF5IDI3IDIzOjE4OjMzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMjIKCk1vbiBNYXkgMjcgMTY6NDQ6MDQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyB3aW4zMi9saWJ4bWwyLmRlZi5zcmMgd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYwoJICBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6IGZpeGluZyAjNzkzMzQgbWFraW5nIGh0bWxQYXJzZURvY3VtZW50CgkgIGEgcHVibGljIGVudHJ5IHBvaW50LgoJKiBkb2MvKjogcmVidWlsdCB0aGUgQVBJIGFuZCBkb2NzCgpNb24gTWF5IDI3IDE0OjE2OjI4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwYXRjaCBmcm9tIFJpY2hhcmQgSmlua3MgdG8gZml4IGEgcHJvYmxlbSBpbnRyb2R1Y2VkCgkgIGluIHRoZSBwcmV2aW91cyBwYXRjaCBhbmQgcG9pbnRlZCBieSBOb3JtCgpGcmkgTWF5IDI0IDEzOjEwOjIyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4aW5nIGJ1ZyAjODExMTIKCkZyaSBNYXkgMjQgMTM6MDM6MjQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBmaXhpbmcgYnVnICM4Mjg0OAoKRnJpIE1heSAyNCAwOTo1NDo0OSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcmVzdWx0L2NhdGFsb2dzL215Y2F0YWxvZy5mdWxsOiBBbGVrc2V5J3MgY29tbWl0IGNoYW5nZWQgdGhlCgkgIG91dHB1dCBvZiBvbmUgY2F0YWxvZyB0ZXN0CgpGcmkgMjQgTWF5IDIwMDIgMTI6MTc6NDUgQU0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgoJKiBnbG9iYWwuZGF0YSBnbG9iYWxzLmMgdHJlZS5jIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCAKCXdpbjMyL2xpYnhtbDIuZGVmLnNyYyB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBjaGFuZ2VkCglkZWZhdWx0IHZhbHVlIGZvciBnbG9iYWwgcGFyYW1ldGVyIHhtbEluZGVudFRyZWVPdXRwdXQgdG8gMSBhbmQKCWludHJvZHVjZWQgbmV3IGdsb2JhbCBwYXJhbWV0ZXIgeG1sVHJlZUluZGVudFN0cmluZyAodGhlIHN0cmluZwoJdXNlZCB0byBkbyBvbmUtbGV2ZWwgaW5kZW50KSB3aXRoIGRlZmF1bHQgdmFsdWUgIiAgIiAoYXMgaXQgd2FzCglpbiB0cmVlLmMpCgpUaHUgTWF5IDIzIDEzOjU1OjU3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogTWVyaWpuIEJyb2VyZW4gcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdoZW4gY29tcGlsaW5nCgkgIHdpdGggdHJpbyBhbmQgc2NoZW1hcy4KCldlZCBNYXkgMjIgMTE6NTc6NDkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHBhdGNoIGZyb20gUmljaGFyZCBKaW5rcyB0byBmaXggdGhlIHByb2JsZW0gcmFpc2VkIGluCgkgIGh0dHA6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy94bWwvMjAwMi1BcHJpbC9tc2cwMDI0Ni5odG0KCldlZCBNYXkgMjIgMDg6Mzg6MTkgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogYSBiaXQgb2Ygd29yayBvbiBpbXBvcnQuCgkqIHhtbHNjaGVtYXN0eXBlcy5jOiBDaGFybGVzIEJvemVtYW4gcHJvdmlkZWQgYSBjb21wYXJlIGZ1bmN0aW9uCgkgIGZvciBkYXRlL3RpbWUgdHlwZXMgc28gbWluL21heCBmYWNldCByZXN0cmljdGlvbnMgc2hvdWxkIHdvcmssCgkgIGluZGV0ZXJtaW5hdGUgY29tcGFyaXNvbnMgcmV0dXJuIGFuIGVycm9yIGluc3RlYWQgb2YgZXF1YWwuCgkqIHRlc3Qvc2NoZW1hcy9kYXRlXzAqIHJlc3VsdC9zY2hlbWFzL2RhdGVfMF8wOiBzcGVjaWZpYyB0ZXN0CgkgIGZyb20gQ2hhcmxlcyBCb3plbWFuIHRvbwoKU2F0IE1heSAxOCAwOTo1NDoxMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLjMgZG9jL2J1aWxkRG9jQm9va0NhdGFsb2c6IGFwcGx5IGEgY291cGxlIG9mIHBhdGNoZXMKCSAgZnJvbSBDaHJpc3RpYW4gQ29ybmVsc3NlbiBmaXhpbmcgdGhlIG1hbiBwYWdlcyBhbmQgdGhlIENhdGFsb2cKCSAgYnVpbGRpbmcgc2NyaXB0LgoJKiB4bWxzY2hlbWFzLmMgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oOiBub3RoaW5nIG5ldyB5ZXQKCSAgbmV4dCBzdGVwIGlzIDx4czppbXBvcnQ+IEkgbm93IGhhdmUgYSByZWFzb25hYmxlIHVuZGVyc3RhbmRpbmcKCSAgb2YgaG93IGl0IHdvcmtzLgoKVGh1IE1heSAxNiAxMDo0MzoyNiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXBwbGllZCBhIHNtYWxsIGJ1ZmZlciBwZXJmb3JtYW5jZSBwYXRjaCBmcm9tIEdhcnkgUGVubmluZ3RvbgoKV2VkIE1heSAxNSAwMDoyNTozNCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9saWJ4bWwyLmRlZi5zcmM6IGV4cG9ydGVkIHhtbFhQYXRoTm9kZVNldEFkZE5zKCkKClR1ZSBNYXkgMTQgMTM6MDA6NDggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGluZyBhbiBYUGF0aCBmdW5jdGlvbiBldmFsdXRhdGlvbiBidWcgcG9pbnRlZCBvdXQKCSAgYnkgQWxleGV5IEVmaW1vdiB3aGVyZSB0aGUgY29udGV4dCB3YXMgbG9zdCB3aGVuIGV2YWx1YXRpbmcKCSAgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cwoKTW9uIDEzIE1heSAyMDAyIDExOjM3OjM5IFBNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiBtYWtlZCB4bWxYUGF0aE5vZGVTZXRBZGROcygpIAoJICBmdW5jdGlvbiBwdWJsaWMgZm9yIFhNTFNlYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zCgpNb24gTWF5IDEzIDEyOjMyOjIyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IDogZml4ZWQgYSBwcm9ibGVtCgkgIHdpdGggdGhlIEhUTUwgcGFyc2VyIHBvaW50ZWQgYnkgR2FyeSBCZW5zb24KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9wdXNoU0FYaHRtbC5weTogc2RkaW5nIHRoZQoJICBleGFtcGxlCgpUaHUgMDkgTWF5IDIwMDIgMTE6MTk6MDAgQU0gUERUIEFsZWtzZXkgU2FuaW4gPGFsZWtzZXlAYWxla3NleS5jb20+CgkqIHBhcnNlci5jOiBmaXhlZCBidWcgIzgxMTU5IChtZW1vcnkgZ3Jvd3RoIGluIFNBWCkKClR1ZSAwNyBNYXkgMjAwMiAwOToyMDoyMSBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCSogeHBhdGguYzogZml4ZWQgYnVnICM3ODg1OCAodGhlIHJlYWwgZml4KQoKU2F0IDA0IE1heSAyMDAyIDExOjU2OjMxIFBNIFBEVCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoJKiB4cGF0aC5jOiBmaXhlZCBidWcgIzc4ODU4IChxdWljayBhbmQgZHVydHkgZml4IHRvIGhpZGUgdGhlIHByb2JsZW0pCgpTdW4gTWF5ICA1IDA4OjU3OjA4IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IG1vZGlmaWVkIHhtbE5vZGVTZXRCYXNlIHRvIGFsbG93IGNoYW5naW5nIHRoZQoJICBiYXNlIG9mIGEgZG9jdW1lbnQuCgpGcmkgTWF5ICAzIDA5OjIwOjQxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzdHlwZXMuYzogcGF0Y2ggQ2hhcmxlcyBCb3plbWFuIGZvciB2YWxpZGF0aW9uIG9mCgkgIGFsbCB0aGUgZGF0ZSwgdGltZSwgYW5kIGR1cmF0aW9uIHR5cGVzCgkqIHRlc3Qvc2NoZW1hcy9kdXJfMCogcmVzdWx0L3NjaGVtYXMvZHVyXzAqOiBhc3NvY2lhdGVkIHRlc3RzCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgYW4gZXJyb3IgcG9pbnRlZCBieSBhbiB1c2VyCgkqIHhtbDItY29uZmlnLmluOiBmaXhlZCBhbiBlcnJvciBwb2ludGVkIGJ5IGFuIHVzZXIKCldlZCAwMSBNYXkgMjAwMiAxMToyOToyNyBBTSBQRFQgQWxla3NleSBTYW5pbiA8YWxla3NleUBhbGVrc2V5LmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmggd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYwoJd2luMzIvbGlieG1sMi5kZWYuc3JjIHhtbElPLmM6IGV4cG9ydGVkIGRlZmF1bHQKCSdmaWxlOicsICdodHRwOicgYW5kICdmdHA6JyBwcm90b2NvbHMgaW5wdXQgaGFuZGxlcnMgCglhbmQgbWFrZWQgcHJvdG9jb2xzIGNvbXBhcmlzc29uIGNhc2UgaW5zZW5zaXRpdmUKClR1ZSBBcHIgMzAgMTY6Mjk6MDUgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogTmV2ZW4gSGFzIGRldGVjdGVkIGEgdHlwbwoKVHVlIEFwciAzMCAwODo0ODoxMSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogQVVUSE9SUyBIQUNLSU5HOiBhZGRlZCBBbGVrc2V5IFNhbmluIDxhbGVrc2V5QGFsZWtzZXkuY29tPgoJICBhcyBvbmUgb2YgdGhlIHBlcnNvbnMgYWxsb3dlZCB0byBjb21taXQgZGlyZWN0bHkgdG8gdGhlCgkgIG1vZHVsZS4KCk1vbiBBcHIgMjkgMTc6NDg6MjYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIDIuNC4yMQoJKiB2YWxpZC5jOiByYWlzZWQgYSB0b28gbG93IGxpbWl0CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2NzIAoKV2VkIEFwciAyNCAxMzo0MTowMyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGVzdC9YUGF0aC9leHByL2Zsb2F0cyB0ZXN0L1hQYXRoL2V4cHIvZnVuY3Rpb25zCgkgIHJlc3VsdC9YUGF0aC9leHByL2Zsb2F0cyByZXN1bHQvWFBhdGgvZXhwci9mdW5jdGlvbnMKCSAgeHBhdGguYzogYW5vdGhlciBYUGF0aCBjb25mb3JtYW5jZSBwYXRjaCBmcm9tIFJpY2hhcmQgSmlua3MKClR1ZSBBcHIgMjMgMTk6NTA6NDAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHNjaGVtYXMuYzogZml4ZWQgdmFsaWRhdGlvbiBvZiBhdHRyaWJ1dGUgZ3JvdXBzLgoJKiB0ZXN0L3NjaGVtYXMgcmVzdWx0L3NjaGVtYXM6IGFkZGVkIGFuIGV4YW1wbGUgZnJvbSB0aGUgcHJpbWVyCgpUdWUgQXByIDIzIDA5OjExOjM3IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmM6IG1vcmUgd29yayBvbiBTY2hlbWFzCgkqIHRlc3Qvc2NoZW1hcyByZXN1bHQvc2NoZW1hczogdXBkYXRlZCB0aGUgdGVzdCBsaXN0CgpNb24gQXByIDIyIDE3OjU5OjE0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBUT0RPOiB1cGRhdGVkIGEgYml0CgkqIHBhcnNlci5jOiBtYWRlIGEgY29tbWVudCBtb3JlIHNwZWNpZmljCgkqIHhtbHJlZ2V4cC5jIHhtbHNjaGVtYXMuYyB4bWxzY2hlbWFzdHlwZXMuYzogbW9yZSB3b3JrIG9uIHRoZQoJICBTY2hlbWFzIGNvbmZvcm1hbmNlLgoJKiB0ZXN0L3NjaGVtYXMgcmVzdWx0L3NjaGVtYXM6IHVwZGF0ZWQgdGhlIHRlc3QgbGlzdAoKU2F0IEFwciAyMCAxOTozNjozOSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbGF1dG9tYXRhLmg6CgkgIGltcGxlbWVudGluZyB4czphbGwgd2l0aCBtaW5PY2N1cnMgPSAwCgkqIHRlcy9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKjogYWRkZWQgbW9yZSB0ZXN0cyBjb3ZlcmluZwoJICB4czphbGwKClNhdCBBcHIgMjAgMDk6MjI6NTAgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbHJlZ2V4cC5jOiBmaXJzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYWxsIHBhcnRpY2xlLCB0aGlzCgkgIG1heSBuZWVkIHRvIGJlIHJldmlzaXRlZCBmb3IgY2FzZSB3aGVyZSBub3QgYWxsIHRyYW5zaXRpb25zCgkgIG11c3QgYmUgY3Jvc3NlZC4KCkZyaSBBcHIgMTkgMTg6MjY6MDQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogYW5vdGhlciBlbnRpdHkgcHJvY2Vzc2luZyB1cGRhdGUgZnJvbSBNYXJrdXMgSGVua2UKCkZyaSBBcHIgMTkgMTc6MTQ6MjQgQ0VTVCAyMDAyIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogdHJpb25hbi5jOiBmaXhlZCBjcmFzaCBvbiBPU0YvMQoKRnJpIEFwciAxOSAwOTowMDo1NiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sc2NoZW1hcy5jOiBtb3JlIFNjaGVtYXMgd29yawoJKiB0ZXN0L3NjaGVtYXMvKiByZXN1bHQvc2NoZW1hcy8qOiBhZGRlZCBtb3JlIHRlc3RzIGNvbWluZwoJICBmcm9tIHRoZSBzcGVjLgoKVGh1IEFwciAxOCAyMzowMDowMiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBwYXRjaCBmcm9tIEFsZWtzZXkgU2FuaW4gcmVmbGVjdGluZyBhIGNoYW5nZSBpbiB0aGUKCSAgRXhjQzE0TiBzcGVjaWZpY2F0aW9uCgpUaHUgQXByIDE4IDE4OjM4OjMwIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IHBhdGNoIGZyb20gTWFya3VzIEhlbmtlLCBmaXggZm9yIHJlY3Vyc2l2ZSBlbnRpdGllcy4KClRodSBBcHIgMTggMTc6NDk6MjQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeCBhIHByb2JsZW0gd2l0aCBzdHJpbmcoKSBvbiBhIGRvY3VtZW50IG5vZGUuCgpUaHUgQXByIDE4IDE2OjQwOjQyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSB4bWxzY2hlbWFzLmM6IG1vcmUgU2NoZW1hcyB3b3JrCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIG1vcmUgdGVzdHMgY29taW5nCgkgIGZyb20gdGhlIHNwZWMuCgpUaHUgQXByIDE4IDEzOjUyOjUyIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jOiBmaXhlZCAmIHNlcmlhbGl6YXRpb24gYnVnIGludHJvZHVjZWQgaW4gMi40LjIwCgkqIHJlc3VsdC9IVE1MLyo6IHRoaXMgY2hhbmdlcyBhIGZldyB0aGluZ3MgaW4gdGhlIHJlc3VsdHMKCldlZCBBcHIgMTcgMjA6MzQ6MzcgQ0VTVCAyMDAyIElnb3IgWmxhdGtvdmljIDxpZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlPgoKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBlbGltaW5hdGVkICdkZWNsYXJhdGlvbiBkaWZmZXJlbnQgdGhhbgoJIHByb3RvdHlwZScgd2FybmluZwoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6ICJyZXNvbHZlZCIgY29uZmxpY3RzIHdpdGggZXJybm8uaAoKV2VkIEFwciAxNyAxODoyNjowNyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIGluY2x1ZGUvbGlieG1sL3htbGF1dG9tYXRhLmg6IG1vcmUgd29yawoJICBvbiB0aGUgYXV0b21hdGEgaW50ZXJmYWNlcyBhbmQgZGVidWcgb2YgY291bnRlZCBjaG9pY2VzCgkqIHRlc3Qvc2NoZW1hcy8qIHJlc3VsdC9zY2hlbWFzLyo6IGFkZGVkIGEgbnVtYmVyIG9mIHRlc3RzCgpXZWQgQXByIDE3IDExOjAzOjAzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxzY2hlbWFzLmMgeG1sc2NoZW1hc3R5cGVzLmMgaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hcy5oOgoJICBhIGJpdCBvZiB3b3JrIG9uIFNjaGVtYXMKCSogdGVzdFNjaGVtYXMuYzogdHJ5IHRvIG1ha2UgaXQgbW9yZSB1c2VmdWwKCSogdGVzdC9zY2hlbWFzLyogcmVzdWx0L3NjaGVtYXMvKiBNYWtlZmlsZS5hbTogY2hhbmdlZCB0aGUKCSAgU2NoZW1hcyByZWdyZXNzaW9uIHRlc3QgcHJvY2VkdXJlLCBzdGFydGVkIGFkZGluZyBhIGZldyBzYW1wbGVzCgpUdWUgQXByIDE2IDE5OjUyOjAxIENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aXpsYXRrb3ZpY0BzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmg6IFBhdGNoIGZvciB0aGUgQm9ybGFuZCBDKysgYnVpbGRlcgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IFBhdGNoIGZvciB0aGUgQm9ybGFuZCBDKysgYnVpbGRlcgoJKiB0aHJlYWRzLmM6IFBhdGNoIGZvciB0aGUgQm9ybGFuZCBDKysgYnVpbGRlcgoJKiB3aW4zMi9iY2I1OiBOZXcgZGlyZWN0b3J5IGZvciB0aGUgQm9ybGFuZCBDKysgYnVpbGRlcgoJIHByb2plY3QgZmlsZXMgICAgICAgCgpUdWUgQXByIDE2IDE5OjQ2OjU1IENFU1QgMjAwMiBJZ29yIFpsYXRrb3ZpYyA8aXpsYXRrb3ZpY0BzdHVkLmZoLWZyYW5rZnVydC5kZT4KCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IFVwZGF0ZSBmb3IgWE1MIFNjaGVtYSBzdXBwb3J0CgkqIHdpbjMyL2NvbmZpZ3VyZS5qczogVXBkYXRlIGZvciBYTUwgU2NoZW1hIHN1cHBvcnQKCSogd2luMzIvbGlieG1sMi5kZWYuc3JjOiBVcGRhdGUgZm9yIFhNTCBTY2hlbWEgc3VwcG9ydAoKVHVlIEFwciAxNiAxNzo0Njo0MyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW0gVE9ET19TQ0hFTUFTIGNvbmZpZ3VyZS5pbiBnZW5Vbmljb2RlLnB5IHRlc3RBdXRvbWF0YS5jCgkgdGVzdFJlZ2V4cC5jIHRlc3RTY2hlbWFzLmMgeG1scmVnZXhwLmMgeG1sc2NoZW1hcy5jIHhtbHNjaGVtYXN0eXBlcy5jCgkgeG1sdW5pY29kZS5jIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgaW5jbHVkZS9saWJ4bWwvc2NoZW1hc0ludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3htbGF1dG9tYXRhLmgKCSBpbmNsdWRlL2xpYnhtbC94bWxyZWdleHAuaCBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzLmgKCSBpbmNsdWRlL2xpYnhtbC94bWxzY2hlbWFzdHlwZXMuaCBpbmNsdWRlL2xpYnhtbC94bWx1bmljb2RlLmgKCSBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4gOiBtZXJnZWQgdGhlIGN1cnJlbnQgc3RhdGUgb2YKCSBYTUwgU2NoZW1hcyBpbXBsZW1lbnRhdGlvbiwgaXQgaXMgbm90IGNvbmZpZ3VyZWQgaW4gYnkgZGVmYXVsdCwKCSBhIHNwZWNpZmljIC0tc2NoZW1hcyBjb25maWd1cmUgb3B0aW9uIGhhcyBiZWVuIGFkZGVkLgoJKiB0ZXN0L2F1dG9tYXRhIHRlc3QvcmVnZXhwIHRlc3Qvc2NoZW1hcyBNYWtlZmlsZS5hbQoJICByZXN1bHQvYXV0b21hdGEgcmVzdWx0L3JlZ2V4cCByZXN1bHQvc2NoZW1hczoKCSAgbWVyZ2VkIGF1dG9tYXRhL3JlZ2V4cC9zY2hlbWFzIHJlZ3Jlc3Npb24gdGVzdHMKClR1ZSBBcHIgMTYgMDk6NDg6NDQgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IEdhcnkgZm91bmQgYSBjb21waWxlIHRpbWUgcHJvYmxlbSwgZml4ZXMgIzc4ODIzCgpNb24gQXByIDE1IDE5OjExOjM2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2Ugb2YgMi40LjIwCgkqIGRvYy8qOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpNb24gQXByIDE1IDE0OjU1OjUzIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IHBhdGNoIGZyb20gQ3Jpc3RpYW4gR2FmdG9uIHRvIGJ1aWxkIG9uCgkgIFJlZCBIYXQgNi4yLCBzaG91bGQgYWxzbyBmaXggIzc1Nzc5CgpNb24gQXByIDE1IDEyOjE0OjQ5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXJzdCBwYXJ0IG9mIGZpeGluZyAjNzg3MjkKClN1biBBcHIgMTQgMjM6NDQ6NTggQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgdXJpLmM6IGZpeGluZyBidWcgIzc4NjYyIGkuZS4gYWRkIHByb3BlcgoJICBlc2NhcGluZyBvZiBVUkkgd2hlbiBzYXZpbmcgSFRNTCBmaWxlcy4KCSogcmVzdWx0L0hUTUwvKjogdGhpcyBpbXBhY3RlZCBzb21lIHRlc3RzCgpTdW4gQXByIDE0IDE0OjU1OjE1IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHRyeWluZyB0byBmaXggIzc3NDQxCgpGcmkgQXByIDEyIDIzOjAyOjE2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxJTy5oOiBIYWxsc2tpIGNvbXBsYWluZWQgaXQgY291bGQgbm90IGJlCgkgIGluY2x1ZGVkIGJ5IGl0c2VsZi4KClRodSBBcHIgMTEgMTA6MjM6MzYgQ0VTVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogYXBwbGllZCBhbiBJRUVFIGZsYWcgcGF0Y2ggZm9yIE9TRi8xICM3NzgyNQoKV2VkIEFwciAxMCAyMzozMTozNCBDRVNUIDIwMDIgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgoJKiB3aW4zMi9jb25maWd1cmUuanM6IHBhdGNoIGZyb20gTmlsbyBmb3IgdGhlIGMxNG4gb3B0aW9uCgkqIHdpbjMyL01ha2VmaWxlLm1zdmM6IGZpeGVkIGxpYnhtbDIuZGVmIGdlbmVyYXRpb24gd2l0aCB0aHJlYWRzCgpXZWQgQXByIDEwIDIxOjI0OjE2IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiBTaWx2YW4gTWluZ2hldHRpCgkgIHBvaW50ZWQgZXJyb25lb3VzIHVzZSBvZiBMSUJYTUxfVEhSRUFEU19FTkFCTEVEIGluc3RlYWQgb2YKCSAgIExJQlhNTF9USFJFQURfRU5BQkxFRAoKV2VkIEFwciAxMCAxODoxMjo1MiBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogYW5vdGhlciBwYXRjaCBmcm9tIFJpY2hhcmQgSmlua3MgZm9yIHN1YnN0cmluZyBjb25mb3JtYW5jZQoJKiB0ZXN0L1hQYXRoL2V4cHIvZmxvYXRzIHRlc3QvWFBhdGgvZXhwci9zdHJpbmdzCgkgIHJlc3VsdC9YUGF0aC9leHByL2Zsb2F0cyByZXN1bHQvWFBhdGgvZXhwci9zdHJpbmdzOiB1cGRhdGUgb2YgdGhlCgkgIHRlc3Qgc3VpdGUgdG8gY2hlY2sgdGhvc2UuCgpXZWQgQXByIDEwIDEzOjI5OjQ5IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBwYXRjaCBmcm9tIFJpY2hhcmQgSmlua3MgZm9yIC54IGZsb2F0IHBhcnNpbmcuCgpUdWUgQXByICA5IDE4OjA5OjMxIENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogcGF0Y2ggZnJvbSBNYXJrdXMgSGVua2Ugd2hlbiBhbiBlbmNvZGluZyBhaW4ndCByZWNvZ25pemVkCgpUdWUgQXByICA5IDE1OjQ3OjE0IENFU1QgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwubTQ6IGdvdCBhIHJlcG9ydCB0aGF0ICNpbmNsdWRlIDxzdHJpbmcuaD4gd2FzIG5lZWRlZAoKVHVlIEFwciAgOSAxMTo1MToyNSBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhcHBsaWVkIGEgZml4IGZyb20gQW50aG9ueSBKb25lcyBmb3IgLW8gLy0tb3V0cHV0CgpUdWUgQXByICAyIDIwOjI3OjExIE1TVCAyMDAyIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MvZXhhbXBsZS5odG1sOiBmaXhpbmcgdHlwbwoKTW9uIEFwciAgMSAxMDowMjo1NyBDRVNUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogZml4ZWQgYSBidWcgaW4gdGhlIG5vZGVzZXQgdG8gYm9vbGVhbiBjb21wYXJpc29uIGNvZGUKCSAgcG9pbnRlZCBvdXQgYnkgTWVsdnluIFNvcGFjdWEuCgpGcmkgTWFyIDI5IDIzOjQxOjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5tNDogRnLpZOlyaWMgQ3JvemF0IGdhdmUgYSBwYXRjaCByZWxhdGVkIHRvIHRoZSBjaGFuZ2UKCSAgb2YgSW5jbHVkZSBwYXRocyBicmVha2luZyB0aGUgbGlieG1sLm00CgpGcmkgTWFyIDI5IDE4OjI1OjU0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IEZpeCBidWcgIzc2OTI3IGZvcmdvdCB0byBzYXZlIHNvbWUgY29udGV4dAoJICB3aGVuIGV2YWx1YXRpbmcgYmluYXJ5IGV4cHJlc3Npb25zCgpUaHUgTWFyIDI4IDE5OjIyOjQ4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgY29uZmlndXJlIGZvciBNUEUvaVggZnJvbSBNYXJrdXMgSGVua2UKCSogeG1sbWVtb3J5LmM6IGZpeGVkIGluaXRpYWxpemF0aW9uIHByb2JsZW1zCgkqIHhwYXRoLmM6IGFub3RoZXIgc2V0IG9mIHBhdGNoZXMgZnJvbSBSaWNoYXJkIEppbmtzIHRoaXMKCSAgZml4ZXMgIm1ha2UgWFBhdGh0ZXN0cyIgb24gbGludXgKCldlZCBNYXIgMjcgMTc6MDk6NDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJpb25hbi5jIHRyaW9uYW4uaCB4cGF0aC5jOiBtb3JlIHBhdGNoZXMgZnJvbSBSaWNoYXJkIEppbmtzCgkqIHRlc3QvWFBhdGgvZXhwci9jb21wYXJlIHRlc3QvWFBhdGgvZXhwci9lcXVhbGl0eQoJICB0ZXN0L1hQYXRoL2V4cHIvZmxvYXRzIHRlc3QvWFBhdGgvZXhwci9mdW5jdGlvbnMKCSAgdGVzdC9YUGF0aC9leHByL3N0cmluZ3MgcmVzdWx0L1hQYXRoL2V4cHIvY29tcGFyZQoJICByZXN1bHQvWFBhdGgvZXhwci9lcXVhbGl0eSByZXN1bHQvWFBhdGgvZXhwci9mbG9hdHMKCSAgcmVzdWx0L1hQYXRoL2V4cHIvZnVuY3Rpb25zIHJlc3VsdC9YUGF0aC9leHByL3N0cmluZ3M6IFVwZGF0ZWQKCSAgdGVzdHMgdGhvdWdoIHRoZXkgc2hvdyBhIGRpdmVyZ2VuY2Ugb24gTGludXgKCldlZCBNYXIgMjcgMTA6MDY6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYyB0cmlvbmFuLmM6IHByZXZpb3VzIGNvbW1pdCBhbHNvIGluY2x1ZGVkIHBhdGNoZXMKCSAgZnJvbSBSaWNoYXJkIEppbmtzIG9uIHNvbWUgSUVFRSBzdXBwb3J0IGNvcm5lciBjYXNlCgpXZWQgTWFyIDI3IDEwOjAzOjExIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEFVVEhPUlMgSEFDS0lORzogQWRkZWQgSWdvciBabGF0a292aWMgYXMgb2ZmaWNpYWwgbWFpbnRhaW5lcgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtOiBBbGJlcnQgQ2hpbiBwb2ludGVkCgkgIHRoYXQgJChkYXRhZGlyKSBzaG91bGQgYmUgdXNlZCBmb3IgZG9jcwoKVHVlIE1hciAyNiAxMzo0MzoxNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBUaG9tYXMgU3RlaW5ib3JuIHBvaW50ZWQgb3V0ICM3NjQwNCB0aGF0IGxpYnhtbDIKCSAgY291bGQgbGVhayBmaWxlZGVzY3JpcHRvcnMKClR1ZSBNYXIgMjYgMDg6NTU6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIG5hbm9odHRwLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbGxhbiBDbGFyayBmb3IKCSAgVW5peFdhcmUvT3BlblNlcnZlcgoKTW9uIE1hciAyNSAxNzo0NTo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMTkKCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3MKCk1vbiBNYXIgMjUgMTc6MzQ6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbmFub2h0dHAuYzogZml4aW5nICM3NjA0MywgZ290IGZlZCB1cCB3aXRoIG5vbi1wb3J0YWJpbGl0eQoJICBvZiB0aGF0IHBpZWNlIG9mIGNvZGUuCgpNb24gTWFyIDI1IDEzOjA4OjIxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmMgU0FYLmM6IE5ldmVyIGNvbW1pdCB3aXRob3V0IHJ1bm5pbmcgIm1ha2UgdGVzdHMiIDotKAoJICBmaXggYSBjb3VwbGUgb2Ygc3R1cGlkaXRpZXMgaW4gdGhlIHByZXZpb3VzIGNvbW1pdAoJKiByZXN1bHQvKjogYSBmZXcgY2hhbmdlcyBpbiBzb21lIGF0dHJpYnV0ZSBvcmRlciByZXN1bHQgb2YgcHJldmlvdXMKCSAgY29tbWl0LgoKTW9uIE1hciAyNSAxMTo0NjowNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIFNBWC5jOiBmaXhlZCBidWcgIzc2MTY4LCBhdHRyaWJ1dGUgcmVkZWNsYXJlZCBpbgoJICB0aGUgaW50ZXJuYWwgc3Vic2V0IHNob3VsZCBub3QgcmFpc2UgZHVwbGljYXRlIElEIGVycm9ycywKCSAgYWxzbyB0aGVyZSB3YXMgYSBzbWFsbCBidWcgaW4gY29uanVuY3Rpb24gdG8gbmFtZXNwYWNlCgkgIGRlY2xhcmF0aW9ucyBkZWZhdWx0ZWQgYW5kIHhtbDp4eHggYXR0cmlidXRlcyBEVEQgZGVmaW5pdGlvbnMuCgpGcmkgTWFyIDIyIDE1OjEzOjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IFJpY2hhcmQgSmlua3MgYWxzbyByYWlzZWQgc29tZSByb3VuZGluZyBwcm9ibGVtcwoJICB0aGlzIHRyaWVzIHRvIGZpeCB0aGVtCgpGcmkgTWFyIDIyIDEzOjIyOjA5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IFJpY2hhcmQgSmlua3Mgc3BvdHRlZCBhbiBpbmNvaGVyZW50IG1lbW9yeSBhbGxvY2F0aW9uCgkgIGJlaGF2aW91ciBpbiB4bWxYUGF0aENhc3RUb1N0cmluZygpCgpUaHUgTWFyIDIxIDE0OjI1OjI5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IGZpeGVkIGEgYnVnIGluIHRoZSBJU08tTGF0aW4gMSB0byBVVEY4IGVuY29kZXIKCSAgcmFpc2VkIGJ5IE1vcnVzIFdhbHRlcgoKVGh1IE1hciAyMSAxNDowNzoxMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxjYXRhbG9nLmMgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBhcHBsaWVkIDIgZml4dXBzCgkgIGZyb20gSWdvcgoKVGh1IE1hciAyMSAxMzozMDowNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhpbmcgIzc1NjE5LCByZWxhdGVkIHRvIGEgcHJvYmxlbSB3aGVuIHRyeWluZwoJICB0byBldmFsdWF0ZSBjb25kaXRpb24gd2hlbiB0aGUgY3VycmVudCBub2RlIHNldCByZXN1bHRpbmcKCSAgZnJvbSB0aGF0IHN1Yi1zdGVwIGV2YWx1YXRpb24gaXMgZW1wdHkuIEFsc28gZml4ZXMgMiBwb3RlbnRpYWwKCSAgcHJvYmxlbSB3aXRoIHByZXZpb3VzLXNpYmxpbmcgYW5kIG5leHQtc2libGluZ3MgYXhpcy4KClRodSBNYXIgMjEgMDk6MDM6NTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBwYXRjaCBmcm9tIE1hcmsgVmFrb2MgdG8gYnVpbGQgQzE0TiBpZiBEb2NCb29rIGFuZAoJICBIVE1MIHN1cHBvcnQgaXMgbm90IGNvbmZpZ3VyZWQgaW4uCgpXZWQgTWFyIDIwIDIyOjQyOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYyBlcnJvci5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRyZWUuYyB4bWxJTy5jCgkgIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogZG9oaCBJIHJlYWxseSBkaWRuJ3QgaW50ZW5kZWQgdG8gY29tbWl0CgkgIHRoaXMgdGVzdCB2ZXJzaW9uIDotKAoKV2VkIE1hciAyMCAyMDoyMDo1NyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0U0FYLmM6IEkgd2FudGVkIHRvIHNlZSB0aGUgcmVhbCBzcGVlZCBhdCB0aGUgU0FYIGludGVyZmFjZQoJICBhZnRlciBhIGxpdHRsZSB0b28gbWFueSBYaW1pYW5lciBzdGFydGVkIGNvbXBsYWluaW5nIGFib3V0IHRoZQoJICBwYXJzZXIgc3BlZWQuCgkgIGFkZGVkIGEgLS1xdWlldCBvcHRpb246CgkgIHBhcGhpbzp+L1hNTCAtPiBscyAtbCBkYjEwMDAwMC54bWwgCgkgIC1ydy1ydy1yLS0gICAgMSB2ZWlsbGFyZCB3d3cgICAgICAyMDE4MjA0MCBNYXIgMjAgMTA6MzAgZGIxMDAwMDAueG1sCgkgIHBhcGhpbzp+L1hNTCAtPiB0aW1lIC4vdGVzdFNBWCAtLXF1aWV0IGRiMTAwMDAwLnhtbCAKCSAgMzIwMDAwNiBjYWxsYmFja3MgZ2VuZXJhdGVkCgkgIHJlYWwJMG0xLjI3MHMKCSAgV2hpY2ggbWVhbnMgMTZNQnl0ZXMvcyBhbmQgM01jYWxsYmFjay9zCgpUdWUgTWFyIDE5IDE5OjMzOjU3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHZhbGdyaW5kIHNwb3R0ZWQgYW5vdGhlciBlcnJvciB0aGF0IHRpbWUgd2hlbiBydW5uaW5nCgkgIG9uIGxpYnhzbHQgcmVncmVzc2lvbiB0ZXN0cwoKVHVlIE1hciAxOSAxNToyNDo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYWRkaW5nICJtYWtlIHZhbGdyaW5kIiBydW5uaW5nIHRoZSBmdWxsIHJlZ3Jlc3Npb24KCSAgdGVzdHMgKGV4Y2VwdCBweXRob24gb25lcykgdW5kZXIgVmFsZ3JpbmQgKHVzaW5nIHZhbGdyaW5kIC1xCgkgIHdoaWNoIHdhcyBraW5kbHkgYWRkZWQgYnkgdGhlIGF1dGhvcikuCgkqIHZhbGlkLmM6IHN0dXBpZCBidWcgcGlucG9pbnRlZCBieSBWYWxncmluZCwgdGhlIHJlZ3Jlc3Npb24gdGVzdHMKCSAgcGFzc2VzIGNsZWFubHkgbm93IGV4Y2VwdCBhbiBvYmN1cmUgZmxvYXRpbmcgcG9pbnQgaW5pdGlhbGl6YXRpb24KCSAgcmFpc2VkIGluIGxvZzEwKCkgaW4gb25lIFhQYXRoIHJlZ3Jlc3Npb24gdGVzdCA/Pz8KCSogdHJlZS5jOiBlZGl0ZWQgc29tZSBjb21tZW50cyB0byBjbG9zZSAjNzUyNDQKClR1ZSBNYXIgMTkgMTI6MTU6MjAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogcHJldHR5IGluc2FuZSB0aGluZywgdGhlIHhtbFhQYXRoRm9ybWF0TnVtYmVyKCkKCSAgd2FzIG5vdCBzZXJpYWxpemluZyAxIGFzICIxIiBpZiBMQ19BTEw9c3ZfU0UgOi0oIGFuZCBpbiB0aGUKCSAgY29udGV4dCBvZiBTY3JvbGxLZWVwZXIsIG1hZGUgc3VyZSB0aGF0IGlmIHRoZSBudW1iZXIgaXMKCSAgYW4gaW50ZWdlciwgdGhlIHNlcmlhbGl6YXRpb24gZm9sbG93cyB0aGUgZGVzY3JpcHRpb24gYXQKCSAgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgjc2VjdGlvbi1TdHJpbmctRnVuY3Rpb25zCgpNb24gTWFyIDE4IDE5OjE4OjEzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC4xOAoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgd2ViIHNpdGUKCSogKi5jIGxpYnhtbC5oOiBpbXBsZW1lbnQgdGhlIG5ldyBJTl9MSUJYTUwgc2NoZW1lIGRpc2N1c3NlZCB3aXRoCgkgIHRoZSBXaW5kb3dzIGFuZCBDeWd3aW4gbWFpbnRhaW5lcnMuCgkqIHBhcnNlci5jOiBodW1tLCBjaGFuZ2VkIHRoZSB3YXkgdGhlIFNBWCBwYXJzZXIgd29yayB3aGVuCgkgIHhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHQoMSkgaXMgc2V0LCBpdCB3aWxsIHRoZW4gCgkgIGRvIHRoZSBlbnRpdHkgcmVnaXN0cmF0aW9uIGFuZCBsb2FkaW5nIGJ5IGl0c2VsZiBpbiBjYXNlIHRoZQoJICB1c2VyIHByb3ZpZGVkIFNBWCBnZXRFbnRpdHkoKSByZXR1cm5zIE5VTEwuCgkqIHRlc3RTQVguYzogYWRkZWQgLS1ub2VudCB0byB0ZXN0IHRoZSBiZWhhdmlvdXIuCgpNb24gTWFyIDE4IDEyOjQ0OjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBXaWxmcmllZCBUZWlrZW4gcHJvdmlkZWQgYSBoYWNraXNoIGJ1dCB3b3JraW5nCgkgIHdheSB0byBnZXQgY29udGV4dCByZXBvcnRlZCBiYWNrIG9uIGVudGl0aWVzIHdoZW4gcGFyc2luZwoJICB3aXRoIFNBWCBhbmQgd2l0aG91dCBicmVha2luZyB0aGUgRE9NIGJ1aWxkLgoKU3VuIE1hciAxNyAxMTozMTo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IGFwcGxpZWQgYSBuZXcgcGF0Y2ggZnJvbSBBbGVrc2V5IFNhbmluCgkqIGRvYy9zaXRlLnhzbCBkb2MveG1sLmh0bWwgZG9jLyouaHRtbDogdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbgoJICB0byByZWZlcmVuY2UgQWxla3NleSBpbXBsZW1lbnRhdGlvbiBvZiBYTUwgZGlnaXRhbCBTaWduYXR1cmVzCgpTYXQgTWFyIDE2IDIzOjAxOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHNtYWxsIGZpeCB0byBhdm9pZCBwb3RlbnRpYWwgcHJvYmxlbSBkdWUgdG8KCSAgb3JkZXJpbmcgb2YgZnJlZWluZyBkYXRhCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogcGVvcGxlIHdlcmUgY29tcGxhaW5pbmcgYWJvdXQgCgkgIHRoZSBnZW5lcmF0ZWQgZmlsZSBpbiBweXRob24gZGlyIG5vdCBiZWluZyBidWlsdAoKRnJpIE1hciAxNSAyMzoyMTo0MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtCgkgIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi90eXBlcy5jOiBDbGVhbnVwCgkgIG9mIHRoZSBweXRob24gTWFrZWZpbGVzIGJhc2VkIG9uIEphY29iIGFuZCBKYW1lcyBmZWVkYmFjaywKCSAgZml4ZWQgdGhlIHNwZWMgZmlsZSBhY2NvcmRpbmdseSwgZml4ZWQgdGhlIG51bWJlciBvZiB3YXJuaW5nCgkgIHRoYXQgcGFzc2luZyBteSBwZWRhbnRpYyBDRkxBR1Mgd2FzIGdlbmVyYXRpbmcuIENvbmNsdXNpb24KCSAgaXMgdGhhdCBQeXRob24gaW5jbHVkZXMgYXJlIHJlYWwgY3JhcC4KCkZyaSBNYXIgMTUgMTk6NDE6MjUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLGluOiBpdCB3YXMgcmVwb3J0ZWQgcXVpdGUgYSBmZXcgdGltZXMgdGhhdAoJICB4bWwyLWNvbmZpZyAtLWNmbGFncyBzaG91bGQgbm90IG91dHB1dAoJICAtSSRpbmNsdWRlcHJlZml4L2xpYnhtbDIvbGlieG1sIGJlY2F1c2UgbGlieG1sMiBoZWFkZXIgbmFtZXMKCSAgY2xhc2hlcyB3aXRoIGV4aXN0aW5nIG5hbWVzIGxpa2UgbGlzdC5oIGZyb20gQysrIHN0bC4KCSAgSW5jbHVkZXMgc2hvdWxkIGJlICNpbmNsdWRlPGxpYnhtbC94eHguaD4gc28gLi4uCgpGcmkgTWFyIDE1IDEwOjQxOjUwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogYW5vdGhlciBwYXRjaCBmcm9tIEFsZWtzZXkgU2FuaW4KCkZyaSBNYXIgMTUgMDg6NTU6NTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogYzE0bi5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQWxla3NleSBTYW5pbiBmaXhpbmcgYSBwcm9ibGVtIGluIHRoZQoJICBjYW5vbmljYWxpemF0aW9uIGFsZ29yaXRobQoJKiBkb2MveG1sLmh0bWwgZG9jL2luZGV4Lmh0bWw6IGFkZGVkIHRoZSBDMTROIHJlZmVyZW5jZXMgb24gdGhlIAoJICBpbmRleCBwYWdlLgoKMjAwMi0wMy0xMyAgamFjb2IgYmVya21hbiAgPGphY29iQHhpbWlhbi5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW06IHJlbW92ZSBMREFERCBhbmQgQ0ZMQUdTIGFzIHRoaXMgaXMgYnJva2VuCgl1c2FnZSwgcmVkdW5kYW50LCBhbmQgZ2NjIHNwZWNpZmljCgpXZWQgTWFyIDEzIDExOjAwOjU5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHNwZWVkdXAgc29tZSBub2RlIHNlbGVjdGlvbiBvcGVyYXRpb25zLCB0aGlzIGNhbgoJICBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIERvY0Jvb2sgTm9ybSdzIHN0eWxlc2hlZXRzCgkqIG5hbm9odHRwLmM6IHNvbWVvbmUgcmVwb3J0ZWQgdGhhdCBTT0NLTEVOX1QgbWF5IG5vdCBiZSBkZWZpbmVkCgkgIG1ha2Ugc3VyZSBpdCdzIGFsd2F5cyB0aGUgY2FzZQoJKiBkZWJ1Z1hNTC5jOiBkaXN0aW5ndWlzaCBDREFUQSBhbmQgY29tbWVudHMgaW4gbHMgb3BlcmF0aW9ucwoKVHVlIE1hciAxMiAxOTo0NToyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC8qLmg6IEhlaWtvIFcuIFJ1cHAgZml4ZWQgYSBsb3Qgb2YgY29tbWVudHMKCSAgdG8gZ2VuZXJhdGUgYmV0dGVyIEFQSSBkZXNjcmlwdGlvbnMgZXRjLi4uCgpNb24gTWFyIDExIDEwOjEwOjMwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGMxNG4uYzogRml4aW5nICM3NDE4NiwgbWFkZSBzdXJlIGFsbCBib29sZWFuIGV4cHJlc3Npb25zCgkgIGdldCBmdWxseSBwYXJlbnRoZXNpemVkLCByYW4gaW5kZW50IG9uIHRoZSBvdXRwdXQKCSogY29uZmlndXJlLmluIEhUTUx0cmVlLmMgU0FYLmMgYzE0bi5jIGRlYnVnWE1MLmMgdHJlZS5jIHhwb2ludGVyLmMKCSAgaW5jbHVkZS9saWJ4bWwvdHJlZS5oOiBhbHNvICM3NDE4NiByZWxhdGVkLCByZW1vdmVkIHRoZQoJICAtLXdpdGgtYnVmZmVycyBvcHRpb24sIGFuZCBhbGwgdGhlIHByZXByb2Nlc3NvciBjb25kaXRpb25hbAoJICBzZWN0aW9ucyB0aGF0IHdlcmUgcmVzdWx0aW5nIGZyb20gaXQuCgpTdW4gTWFyIDEwIDE3OjQ3OjU4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBEb2RqaSBTZWtldGVsaSBmaXhpbmcgYW4KCSAgdW5pbml0YWlsaXplZCB2YXJpYWJsZSBpbiB4bWxWYWxpZEdldFZhbGlkRWxlbWVudHMoKQoKU2F0IE1hciAgOSAxNToxMDo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjMTRuLmM6IGZpeGVkIGEgZmV3IGNvbW1lbnRzCgkqIGRvYy8qLmh0bWwgZG9jLyovKi5odG1sOiByZWdlbmVyYXRlZCB0aGUgZG9jcyBhbmQgYWRkZWQKCSAgdGhlIEMxNE4gQVBJCgkqIGRvYy9hcGkueHNsIGRvYy9nbm9tZS14bWwuc2dtbDogZml4dXBzIGFuZCBhZGRlZCBJRHMKClNhdCBNYXIgIDkgMTE6MTY6MTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2hlY2steG1sLXRlc3Qtc3VpdGUucHk6IGZpeCB0byBhZGFwdCB2YXJhaWF0aW9ucyBpbiB0aGUKCSAgYmluZGluZ3MKCSogY29uZmlndXJlLmluIHB5dGhvbi9zZXR1cC5weSBweXRob24vc2V0dXAucHkuaW46IGZpeGVkIHRvCgkgIGhhdmUgdGhlIHZlcnNpb24gb2YgdGhlIHB5dGhvbiBzY3JpcHRzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZAoKRnJpIE1hciAgOCAxNjo0NTo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIGEgYnVnIG5ld2x5IGludHJvZHVjZWQgYW5kIHBvaW50ZWQgYnkgVXdlIEZlY2huZXIKCSAgaW4geG1sQ29weVByb3AoKQoKRnJpIE1hciAgOCAxNTo0OToxMCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjQuMTcgcmVsZWFzZQoJKiBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoJKiB4cGF0aC5jOiBmaXhlZCBhIGNvbW1lbnQKCSogcHl0aG9uL2xpYnhtbC5jOiBmaXhlZCBhIHBvc3NpYmxlIHJlZW50cmFuY3kgcHJvYmxlbQoKVGh1IE1hciAgNyAyMzoxOToyOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9hdHRyaWJzLnB5OgoJICBmaXhlZCB4bWxIYXNOc1Byb3AoKSBidWdzIGZvciBkZWZhdWx0ZWQgZnJvbSBEVEQgYXR0cmlicywKCSAgYWRkZWQgYSBzcGVjaWZpYyByZWdyZXNzaW9uIHRlc3QKCSogcHl0aG9uL2dlbmVyYXRvci5weTogeG1sSGFzTnNQcm9wKCkgYW5kIHhtbEhhc1Byb3AoKSBzaGFsbAoJICBub3QgcmFpc2UgZXhjZXB0aW9ucyB3aGVuIGZhaWxpbmcgdG8gZmluZCB0aGUgYXR0cmlidXRlLgoKVGh1IE1hciAgNyAxNjoxMTozNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4geG1sbGludC5jOiBvd2VuIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aXRoIHRoZQoJICBmdG1lIGZpeCwgZ2V0dGltZW9mZGF5KCkgd2FzIG5vdCBkZXRlY3RlZCBieSBjb25maWd1cmUgYW5kCgkgIHRoZSBmdGltZSBoZWFkZXIgd2Fzbid0IGluY2x1ZGVkLCBkb2hoaAoKVGh1IE1hciAgNyAxMjoxOTozNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4geG1sbGludC5jOiB0cnlpbmcgdG8gZml4ICM3MTQ1NyBmb3IgdGltaW5nCgkgIHByZWNpc2lvbiB3aGVuIGdldHRpbWVvZmRheSgpIGlzIG5vdCBhdmFpbGJsZSBidXQgZnRpbWUoKSBpcwoKVGh1IE1hciAgNyAxMToyNDowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbiBkb2MvTWFrZWZpbGUuYW06IEZpeGVkICM3MzQwOCBtaXNzaW5nIGltYWdlcwoJICBhcmUgbm93IGNvcGllZCBvbiBpbnN0YWxsIGFuZCBwYXJ0IG9mIHRoZSAtZGV2ZWwgUlBNCgpUaHUgTWFyICA3IDA5OjM0OjE2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IHRyeWluZyB0byBhdm9pZCBidWcgIzcyMTUwIHdoaWNoIHdhcyBhcHBhcmVudGx5CgkgIGNhdXNlZCBieSBhIGdjYyBidWcgKG9yIGEgcHJvY2Vzc29yIHByb2JsZW0pIGFzIGRldGFpbGVkCgkgIGF0IGh0dHA6Ly92ZWlsbGFyZC5jb20vZ2NjLmJ1ZwoKVGh1IE1hciAgNyAwMTowMjozNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9jdXRucGFzdGUucHk6CgkgIGZpeGVkIHhtbFJlY29uY2lsaWF0ZU5zKCksIGFkZGVkIGEgUHl0aG9uIHRlc3QvZXhhbXBsZSBmb3IKCSAgaW50ZXItZG9jdW1lbnQgY3V0J24gcGFzdGUKCSogcHl0aG9uL2xpYnhtbC5weTogZml4ZWQgbm9kZS5kb2Mgb24gZG9jdW1lbnQgbm9kZXMgYW5kIGFkZGVkCgkgIHhwYXRoRXZhbCgpIG9udG8gbm9kZSBvYmplY3RzCgpXZWQgTWFyICA2IDIyOjM4OjAzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmM6IGZpeGVkIHNvbWUgaHRtbFNldE1ldGFFbmNvZGluZygpIHByb2JsZW1zCgkqIHB5dGhvbi9saWJ4bWwuYyBweXRob24vdGVzdHMvTWFrZWZpbGUuYW0gcHl0aG9uL3Rlc3RzL3NlcmlhbGl6ZS5weToKCSAgZml4dXAgYW5kIGludGVncmF0ZWQgdGVzdHMgZm9yIHRoZSBzZXJpYWxpemF0aW9uIHN0dWZmCgpXZWQgTWFyICA2IDE5OjQwOjU3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGxpYnhtbC4zIGxpYnhtbC40IGxpYnhtbC5zcGVjLmluOiBGaXhlZCBidWcgIzcyNTcwCgkgIG1vdmVkIHRoZSBsaWJ4bWwgbWFuIHBhZ2UgdG8gc2VjdGlvbiAzCgpXZWQgTWFyICA2IDE4OjM0OjA3IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogZml4IGJ1ZyAjNzI0OTAKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHk6IGFkZGVkIG1ldGhvZHMgc2VyaWFsaXplKCkKCSAgYW5kIHNhdmVUbygpIHRvIGFsbCBub2RlIGVsZW1lbnRzLgoKVHVlIE1hciAgNSAyMToyNzowMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBjbG9zZWQgIzczNDMwLCBkb24ndCByZWFkIGZyb20gYW4gaW5wdXQgc291cmNlCgkgIHdoaWNoIGluZGljYXRlZCBhbiBlbmQtb2YtZmlsZSBvciBhbiBlcnJvci4KClR1ZSBNYXIgIDUgMTY6MzM6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IG1ha2Ugc3VyZSBTQVggZW5kRG9jdW1lbnQgaXMgYWx3YXlzIGNhbGxlZCBhcwoJICB0aGlzIGNvdWxkIHJlc3VsdCBpbiBhIFB5dGhvbiBtZW1vcnkgbGVhayBvdGhlcndpc2UgKGl0J3MKCSAgdXNlZCB0byBkZWNyZW1lbnQgcmVmLWNvdW50aW5nKQoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5CgkgIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0CgkgIHB5dGhvbi90ZXN0cy9lcnJvci5weSBweXRob24vdGVzdHMveHBhdGgucHk6IGltcGxlbWVudGVkCgkgIHRoZSBzdWdnZXN0aW9ucyBtYWRlIGJ5IEdhcnkgQmVuc29uIGFuZCBleHRlbmRlZCB0aGUgdGVzdHMKCSAgdG8gbWF0Y2ggaXQuCgpUdWUgTWFyICA1IDEwOjM1OjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHk6IGFwcGxpZWQgcGF0Y2ggZml4aW5nICM3MzQ1MAoKTW9uIE1hciAgNCAxNzo1OToyOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhpbmcgIzYxMjkwICJuYW1lc3BhY2Ugbm9kZXMgaGF2ZSBubyBwYXJlbnQiCgkgIGxvbmcgc3RhbmRpbmcgZGl2ZXJnZW5jZSBmcm9tIHRoZSBYUGF0aCBSRUMuIE5vZGVTZXRzCgkgIHNpbXBseSBob2xkIGEgY29weSBvZiBuYW1lc3BhY2Ugbm9kZXMgYW5kIHRob3NlIG5vZGUgLT5uZXh0CgkgIHBvaW50cyB0byB0aGUgcGFyZW50ICh3aGljaCBtYXkgbm90IGJlIHRoZSBub2RlIGNhcnJ5aW5nIHRoZQoJICBkZWZpbml0aW9uKS4KCSogaW5jbHVkZS9saWJ4bWwveHBhdGguaDogZmxhZ2dlZCBidXQgZGlkbid0IGFkZGVkIGEgcG9zc2libGUKCSAgc3BlZWR1cAoJKiBET0NCcGFyc2VyLmMgSFRNTHBhcnNlci5jOiByZW1vdmVkIHNvbWUgd2FybmluZ3MgZnJvbSBwdXNoCgkgIHBhcnNlciBkdWUgdG8gbmV3IHN0YXRlIGJlaW5nIGFkZGVkLgoJKiB0cmVlLmM6IG5ldyBmaXggZnJvbSBCb3JpcyBFcmRtYW5uCgkqIGNvbmZpZ3VyZS5pbiBjMTRuLmMgaW5jbHVkZS9saWJ4bWwvYzE0bi5oIHRlc3RDMTROLmM6IGFkZGVkCgkgIHRoZSBYTUwgQ2Fub25hbGl6YXRpb24gc3VwcG9ydCBmcm9tIEFsZWtzZXkgU2FuaW4KClN1biBNYXIgIDMgMTU6MTI6NDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBwYXRjaCBmcm9tIEJvcmlzIEVyZG1hbm4gZml4aW5nIHNvbWUgbmFtZXNwYWNlIG9kaXRpZXMKCSAgd2l0aCB4bWxDb3B5Tm9kZSgpCgpTYXQgTWFyICAyIDEwOjMzOjA0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IGZpeCBidWcgIzcyNzA2IHdoZW4gbG9hZGluZyBhIE5VTEwgZW50aXR5CgpGcmkgTWFyICAxIDE3OjE0OjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBGaXhlZCAjNzIzNDYsIGFib3V0IGhhbmRsaW5nIG9mIHhtbG5zOmZvbz0iIiwgdGhpcyBjb3VsZAoJICBhY3R1YWxseSBjaGFuZ2UgaW4gYSBmdXR1cmUgWE1MIE5hbWVzcGFjZSByZXZpc2lvbi4KCkZyaSBNYXIgIDEgMTc6MTI6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL3R5cGVzLmMgcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy94cGF0aHJldC5weToKCSAgYWRkZWQgdGhlIHBvc3NpYmlsaXR5IG9mIHJldHVybmluZyBub2Rlc2V0cyBmcm9tIFhQYXRoIGV4dGVuc2lvbgoJICBmdW5jdGlvbnMgd3JpdHRlbiBpbiBQeXRob24KCkZyaSBNYXIgIDEgMTM6NTY6MTIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uLyo6IGNvbW1pdGluZyBzb21lIFB5dGhvbiBiaW5kaW5ncyB3b3JrIGRvbmUgd2hpbGUgdHJhdmVsbGluZwoKRnJpIE1hciAgMSAxMDoxMToxNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGNsb3NlICM3MjY2MyBhbmQgIzcyNjU4LCBkb24ndCBtZW1kdW1wIHVubGVzcyBjb21waWxlZAoJICBleHBsaWNpdGVseSB3aXRoIG1lbW9yeSBkZWJ1Z2dpbmcgc3dpdGNoZWQgb24KClNhdCBGZWIgMjMgMTE6MDg6MDkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbDItcHl0aG9uLWFwaS54bWwKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQgcHl0aG9uL2xpYnhtbF93cmFwLmggcHl0aG9uL3R5cGVzLmM6CgkgIEFkZGVkIHdyYXBwZXIgZm9yIHRoZSB4bWxVUklQdHIgdHlwZSwgcHJvdmlkZWQgYWNjZXNzb3JzLCBmaXhlZAoJICB0aGUgYWNjZXNzb3IgZ2VuZXJhdG9yIGZvciBzdHJpbmdzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvdHN0VVJJLnB5OiBhZGRlZCBhIHNwZWNpZmljCgkgIHJlZ3Jlc3Npb24gdGVzdC4KCkZyaSBGZWIgMjIgMjM6NDQ6NTcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL1JFQURNRSBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vc2V0dXAucHk6CgkgIGFkZGVkIHRoZSAndXN1YWwnIHNldHVwLnB5IHRvIGFsbG93IGJ1aWxkaW5nIGEgbGlieG1sMi1weXRob24KCSAgbW9kdWxlIGJhc2VkIG9uIHRoZSBzYW1lIGNvZGUuIFRoZSBpbml0aWFsaXphdGlvbiBpcyBob3dldmVyCgkgIGRpZmZlcmVudCB0aGUgMiAuc28gZmlsZXMgZm8gbGlieG1sMiBhbmQgbGlieHNsdCBhcmUgaWRlbnRpY2FsIGFuZAoJICB0aGV5IGVudHJ5IHBvaW50IGluaXRpYWxpemUgYm90aCBsaWJyYXJpZXMuIHRoaXMgaXMgZG9uZSB0byBhdm9pZAoJICBzb21lIHBvc3NpYmxlIG5hc3R5IHByb2JsZW0gc2luY2UgdGhlIFB5dGhvbiBkb24ndCBtZXJnZSB0aGUgbWFwcwoJICBvZiBhbGwgc2hhcmVkIG1vZHVsZXMuCgpXZWQgRmViIDIwIDIzOjE2OjA4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIHB1c2gvZW5jb2RpbmcgYnVnIHJlcG9ydGVkIGJ5IE1pY2hhZWwKCSAgb24gbGlicnN2ZwoKV2VkIEZlYiAyMCAxOTo1NDowNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaDogZml4ZXMgYSBtaXNwbGFjZWQgI2VuZGlmCgpXZWQgRmViIDIwIDE3OjQ3OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHZhbGlkLmM6IGZvdW5kIGFuZCBmaXhlZCBhIGNvdXBsZSBvZiBhbGxvY2F0aW9uIGJ1Z3MKCldlZCBGZWIgMjAgMTU6MzY6MDMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbC5odG1sIGRvYy9weXRob24uaHRtbCBkb2MvKjogYWRkZWQgYSBQeXRob24gYW5kIGJpbmRpbmcKCSAgcGFnZSBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBQeXRob24gYmluZGluZ3MgYW5kIAoJICBnaXZpbmcgcG9pbnRlcnMgdG8gdGhlIG90aGVyIGxhbmd1YWdlcyB3cmFwcGVycy4KCldlZCBGZWIgMjAgMTE6MTY6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjE2CgkqIGRvYy8qIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzLAoJICByZWJ1aWx0IHRoZSBBUEkgYW5kIHdlYiBzaXRlCgkqIHhwYXRoLmM6IGZpeGVkICM3MTk3OCBwb3J0YWJpbGl0eSBidWdzCgpUdWUgRmViIDE5IDIyOjQ5OjM2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiBvb3BzIGJyb2tlIGF1dG9tYXRpYyBkZWZhdWx0aW5nIG9mIG5hbWVzcGFjZXMgYXR0cmlidXRlcy4KClR1ZSBGZWIgMTkgMjI6MDE6MzUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggcGFyc2VyLmM6IGhhZCB0byBjaGFuZ2UKCSAgMiBpbnRlcm5hbCBwYXJzaW5nIEFQSSB3aGVuIHByb2Nlc3NpbmcgZG9jdW1lbnQgY29udGVudAoJICB0byBjaGVjayB0aGUgc3RhcnQgYW5kIGVuZCBvZiBlbGVtZW50IGNvbnRlbnQgYXJlIGRlZmluZWQKCSAgaW4gdGhlIHNhbWUgZW50aXR5CgkqIHZhbGlkLmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDogYXR0cmlidXRlIG5vcm1hbGl6YXRpb24gY2FuCgkgIGdlbmVyYXRlIGEgdmFsaWRpdHkgZXJyb3IgYWRkZWQgeG1sVmFsaWRDdHh0Tm9ybWFsaXplQXR0cmlidXRlVmFsdWUoKQoJICB3aXRoIHRoZSBjb250ZXh0IHRvIHJlcG9ydCBpdC4KCSogU0FYLmM6IGZpeGVkIHRoZSBsYXN0IGtub3duIGJ1Z3MsIGNyYXp5IHZhbGlkYXRpb24gY29uc3RyYWludHMKCSAgd2hlbiBhIGRvY3VtZW50IGlzIHN0YW5kYWxvbmUgc2VlbXMgY29ycmVjdGx5IGhhbmRsZWQuIFRoZXJlCgkgIGlzIGEgY291cGxlIG9mIG9wZW4gaXNzdWVzIGxlZnQgd2hpY2ggbmVlZCBjb25zaWRlcmF0aW9uIGVzcGVjaWFsbHkKCSAgUEU5MyBvbiBleHRlcm5hbCB1bnBhcnNlZCBlbnRpdGllcyBhbmQgc3RhbmRhbG9uZSBzdGF0dXMuIAoJICBSYW4gMTgxOSB0ZXN0czogMTgxNyBzdWNlZWRlZCwgMiBmYWlsZWQgYW5kIDAgZ2VuZXJhdGVkIGFuIGVycm9yIGluIDguMjYgcy4KCSAgVGhlIDIgdGVzdHMgbGVmdCBmYWlsaW5nIGFyZSBhY3R1YWxseSBpbiBlcnJvci4gQ2xlYW51cCBkb25lLgoKVHVlIEZlYiAxOSAxNToxNzowMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBpbXBsZW1lbnRlZCBFNTkgc3BhY2VzIGluIENEQVRBIGRvZXMgbm90IG1hdGNoIHRoZQoJICBub250ZXJtaW5hbCBTCgpUdWUgRmViIDE5IDE0OjQ0OjUzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jIHBhcnNlci5jIHZhbGlkLmM6IG1vcmUgdmFsaWRhdGlvbiB0ZXN0IGZpeHVwcwoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogYWRkZWQgZHVyYXRpb24gaW5mbyBmb3IgdGhlIHRlc3RzCgpNb24gRmViIDE4IDIzOjI1OjA4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIHZhbGlkLmM6IGEgY291cGxlIG9mIGVycm9ycyB3ZXJlIHJlcG9ydGVkIGJ1dCBub3QKCSAgc2F2ZWQgYmFjayBhcyBzdWNoIGluIHRoZSBwYXJzaW5nIGNvbnRleHQuIERvd24gdG8gMSUgZmFpbHVyZSByYXRlCgkgIFJhbiAxODE5IHRlc3RzOiAxODAxIHN1Y2VlZGVkLCAxOCBmYWlsZWQgYW5kIDAgZ2VuZXJhdGVkIGFuIGVycm9yCgpNb24gRmViIDE4IDIwOjE2OjE1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbEludGVybmFsZC5jOiBpc0V4dGVuZGVyIHdhcyBtaXNzaW5nIGEgY2hhciAKCSogcGFyc2VyLmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmg6ICUgYXJlIGFjY2VwdGFibGUgaW4gdGhlCgkgIGludGVybmFsIHN1YnNldCBpZiB3aXRoaW4gYSBQVUJMSUMgSUQKCk1vbiBGZWIgMTggMTk6Mjc6MzIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgcGFyc2VySW50ZXJuYWxzLmMgdmFsaWQuYzogbW9yZSB3b3JrIG9uIHRoZSBjb25mb3JtYW5jZQoJICBzdWl0ZS4gVG9vayB0aGUgc3RlcCB0byBmaW5hbGx5IGJsb2NrIGRvY3VtZW50cyB3aXRoIGVuY29kaW5nCgkgIGVycm9ycy4gSXQncyBhIGZhdGFsIGVycm9yIHBlciB0aGUgc3BlYywgcGVvcGxlIHNob3VsZCBoYXZlIGZpeGVkCgkgIHRoZWlyIGRvY3VtZW50cyBieSBub3cuCgpNb24gRmViIDE4IDE1OjMwOjE0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBmaXhlZCB0aGUgdGVzdCBzY3JpcHQgYWZ0ZXIgc29tZSBkaXNjdXNzaW9uCgkgIG9uIHRoZSBzZW1hbnRpYyBvZiBUWVBFPSJlcnJvciIKCSogTWFrZWZpbGUuYW06IGFkZGVkIHRoZSBzY3JpcHQgdG8gdGhlIGRpc3RyaWIKCk1vbiBGZWIgMTggMTI6MTc6NDEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgZW50aXRpZXMuYzogZml4ZWQgYSBjb3VwbGUgb2YgY29uZm9ybWFuY2VzIGlzc3VlcyBkZWVwCgkgIGludG8gdGhlIHZhbGlkYXRpb24gY29kZSAoc3RhbmRhbG9uZSBhbmQgdW5kZWNsYXJlZCBOb3RhdGlvbnMpCgpNb24gRmViIDE4IDAwOjE3OjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCAjNzE3NDEgc3VwaWQgdHlwbyBhbiBhIGJ1ZyBhYm91dCBlbmNvZGluZyBwYXJzaW5nCgkgIHN0YXllZCB0aGVyZSBmb3IgeWVhcnMgIQoKTW9uIEZlYiAxOCAwMDowNjo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jIFNBWC5jOiBmaXhlZCAjNzE3NDAgTm90YXRpb25EZWNsIHdpdGggYSByZXF1aXJlZCBmaWVsZAoJICBtaXNzaW5nCgpTdW4gRmViIDE3IDIzOjQ1OjQwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNoZWNrLXhtbC10ZXN0LXN1aXRlLnB5OiBpbXByb3ZlZCB0aGUgYmVoYXZpb3VyIGEgYml0IGFzCgkgIHdlbGwgYXMgdGhlIGxvZ3MKCSogcGFyc2VyLmMgdmFsaWQuYyBTQVguYzogZml4ZWQgYSBmZXcgbW9yZSBidWdzIAoJICAiUmFuIDE4MTkgdGVzdHM6IDE3Nzggc3VjZWVkZWQsIDQxIGZhaWxlZCwgYW5kIDAgZ2VuZXJhdGVkIGFuIGVycm9yIgoKU3VuIEZlYiAxNyAyMDo0MTozNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjaGVjay14bWwtdGVzdC1zdWl0ZS5weTogcHl0aG9uIHNjcmlwdCB0byBydW4gcmVncmVzc2lvbiB0ZXN0cwoJICBhZ2FpbnN0IHRoZSBYTUwgVGVzdCBzdWl0ZSBvZiBXM0MvT0FTaXMKCSogU0FYLmM6IGZpeGVkIGEgdmFsaWRhdGlvbiBidWcKCSogcGFyc2VyLmM6IGZpeGVkIDMgZXJyb3JzIHBvaW50ZWQgYnkgdGhlIHRlc3Qgc3VpdGUKCSogZG9jL2J1aWxkRG9jQm9va0NhdGFsb2c6IGZpeGVkIGEgdHlwbyBwb2ludGVkIGJ5IGRyYWtlCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogZml4ZWQgYSBkZXBlbmRlbmR5CgpGcmkgRmViIDE1IDIxOjQ3OjEzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jOiBhdm9pZCBhIHdhcm5pbmcgYnVnICM3MTU5NAoKV2VkIEZlYiAxMyAyMjoxMzozMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxtZW1vcnkuYzogSmVzc2UgUGVycnkgcHJvdmlkZWQgYSBwYXRjaCB0byByZW1vdmUgYSBmZXcKCSAgd2FybmluZyBvbiBhbHBoYS9UcnU2NAoKV2VkIEZlYiAxMyAxNDozMDo0OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9lbnRpdGllcy5oOiBmaXhpbmcgYSBjb21tZW50CgkqIHZhbGlkLmM6IGZpeGluZyBzb21lIHRyb3VibGVzIHdpdGggdmFsaWRpdHkgY2hlY2sgb24gbmFtZXNwYWNlcwoJKiByZXN1bHQvVkMvTlMzIHRlc3QvVkMvTlMzOiBhZGRlZCBhIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdAoKV2VkIEZlYiAxMyAxNDowNToyNCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IEZpeGluZyAjNzEzNDIgc2VyaWFsaXppbmcgJ1xuJyBpbiBhdHRyaWJ1dGUgdmFsdWVzCgkqIHJlc3VsdC9ub2VudC9hdHQzIHJlc3VsdC9hdHQzIHRlc3QvYXR0MzogYWRkZWQgYSBzcGVjaWZpYwoJICB0ZXN0LgoKVHVlIEZlYiAxMiAxNDo0NTozMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vbGlieG1sLmM6IGNvdXBsZSBvZiBidWcgZml4ZXMKCk1vbiBGZWIgMTEgMTk6NDE6MjkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uLyoucHk6IHJlbW92ZWQgdGFicyBhbmQgdXNlZCBzcGFjZXMuCgpNb24gRmViIDExIDE5OjI1OjQ0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcHJlcGFyaW5nIDIuNC4xNQoJKiBkb2MvbmV3cy5odG1sIGRvYy94bWwuaHRtbCBkb2MveG1saW8uaHRtbDogcmVidWlsdCBzb21lIGRvY3MKCk1vbiBGZWIgMTEgMTQ6NTM6MjQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbDogdHJ5aW5nIHRvIGNsb3NlIFJlZCBIYXQgYnVnICM1ODcwNwoJICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU4NzA3CgpNb24gRmViIDExIDA5OjUzOjAyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2VuY29kaW5nLmggaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaAoJICBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwvdGhyZWFkcy5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxtZW1vcnkuaDogdHJ5aW5nIHRvIGZpeCB0aGUgaW5jbHVkZSBtZXNzCgpNb24gRmViIDExIDA4OjUzOjMzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oOiByZXZlcnRlZCBwYXJ0IG9mIHRoZSBwcmV2aW91cwoJICBhdHRlbXB0IHRvIHByb3ZpZGUgIzY5NjU1LCB0aGlzIHdhcyBicmVha2luZyB0aGUgYnVpbGQuCgpTdW4gRmViIDEwIDE0OjEzOjM0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgTWFrZWZpbGUuYW0gYnVpbGRfZ2xvYi5weSBjb25maWd1cmUuaW4gZGVidWdYTUwuYwoJICBnbG9iYWxzLmMgcGFyc2VyLmMgdGhyZWFkcy5jIHRyZWUuYyB2YWxpZC5jIHhtbG1lbW9yeS5jCgkgIHhwYXRoLmMgeHBvaW50ZXIuYyBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6CgkgIFRlbnRhdGl2ZWx5IGZpeGVkICM2OTY1NSAsIG1ha2UgY29tcGlsaW5nIHdpdGggLVdyZWR1bmRhbnQtZGVjbHMKCSAgY2xlYW4uCgkqIHB5dGhvbi9saWJ4bWwuYzogZml4ZWQgYSB3YXJuaW5nLgoKU3VuIEZlYiAxMCAxMjowMjo1OSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmMgdmFsaWQuYyB4aW5jbHVkZS5jOiBmaXggIzY4ODgyLCBjbGVhbnVwIHRoZSBYSW5jbHVkZQoJICBjb3B5aW5nIG9mIG5vZGUsIG1lcmdlIGJhY2sgSURzIGluIHRoZSB0YXJnZXQgZG9jdW1lbnQuCgkqIHJlc3VsdC9YSW5jbHVkZS9kb2NpZHMueG1sIHRlc3QvWEluY2x1ZGUvZG9jcy9kb2NpZHMueG1sCgkgIHRlc3QvWEluY2x1ZGUvZW50cy9pZHMueG1sOiB0ZXN0IGNhc2UKCSogcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZDQ6IG91dHB1dCBjaGFuZ2VkIGR1ZSB0byBhIHR5cG8gZml4CgpTYXQgRmViICA5IDIzOjE1OjA0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9NYWtlZmlsZS5hbTogc2VlbXMgc29tZSB2ZXJzaW9uIG9mIGF1dG9tYWtlIGRpZG4ndAoJICBnZW5lcmF0ZSB0aGUgZGVwZW5kZW5jaWVzIHJpZ2h0IGFzIEphY29iIGZvdW5kIG91dC4gQWRkCgkgIGFuIGV4dHJhIGRlcGVuZGVuY3kgcnVsZS4KClNhdCBGZWIgIDkgMTg6NTk6MjMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmMgdmFsaWQuYzogSnVzdGluIEZsZXRjaGVyIGZvdW5kIHNvbWUgcGFydHMKCSAgb2YgdGhlIGNvZGUgbmVlZGluZyBjbGVhbnVwCgkqIGxpYnhtbC5zcGVjLmluIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vZ2VuZXJhdG9yLnB5CgkgIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sLnB5OiBGaXhlZCB0aGUgcHl0aG9uIE1ha2VmaWxlcwoJICBjb3JyZWN0ZWQgYSBidWcgc2hvd2luZyB1cCBvbiBpYTY0LCBjaGFuZ2VkIHRoZSBuYW1lIG9mIHRoZQoJICBweXRob24gaW50ZXJuYWwgbW9kdWxlIHRvbwoKRnJpIEZlYiAgOCAxNToxOToyOCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogYXBwbGllZCBwYXRjaCBmcm9tIEFuZHJpcyBQYXZlbmlzIGZvciBiaW5hcnkKCSAgbmFtZSBzdWZmaXhlcwoKRnJpIEZlYiAgOCAxNDo0MzoxNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmMgd2luMzIvd2luMzJjb25maWcuaDogZml4aW5nICM2ODc0OAoKRnJpIEZlYiAgOCAxNDozNzowNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhpbmcgIzcwMTY2CgpGcmkgRmViICA4IDE0OjMxOjI0IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeGluZyAjNzAwNzcKCkZyaSBGZWIgIDggMTQ6MjQ6MDIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogQ29weXJpZ2h0IE1ha2VmaWxlLmFtIFJFQURNRSBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW46CgkgIENoYW5nZWQgdG8gdGhlIE1JVCBMaWNlbmNlCgkqIGRvYy9GQVEuaHRtbCBkb2MvY2F0YWxvZy5odG1sIGRvYy9pbnRyby5odG1sIGRvYy94bWwuaHRtbAoJICBkb2MveG1saW8uaHRtbDogdXBkYXRlZCB0aGUgZG9jIGFjY29yZGluZ2x5CgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nCgkgIDIuNC4xNCByZWxlYXNlCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOgoJICBmaXhlZCB0aGUgY29uc3QgeG1sQ2hhciAqIHdyYXBwZXIgYW5kIGdlbmVyYXRvciwgWFBhdGggZXh0ZW5zaW9uCgkgIGZ1bmN0aW9ucyBub3cgdXNlIHRoZSBjb250ZXh0IGFzIGZpcnN0IGFyZ3VtZW50CgkqIHB5dGhvbi90ZXN0cy90c3R4cGF0aC5weSBweXRob24vdGVzdHMveHBhdGgucHkKCSAgcHl0aG9uL3Rlc3RzL3hwYXRoZXh0LnB5OiBVcGRhdGVkIHRoZSB0ZXN0cyBhY2NvcmRpbmdseQoJKiB0cmVlLmM6IGZpeGVkIGJ1ZyAjNzAwNjcKClRodSBGZWIgIDcgMTc6MzM6NTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAKCSogZGVidWdYTUwuYzogYWx3YXlzIHVzZSBzdGRvdXQgaWYgb3V0cHV0IGlzIE5VTEwKCSogeG1sSU8uYzogZG9uJ3QgY2xvc2UgZmlsZWRlc2NyaXB0b3JzIHBhc3NlZCB0byBvdXRwdXRCdWZmZXJzCgkqIHB5dGhvbi9NYWtlZmlsZS5hbSBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0CgkgIHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOiBhdWdtZW50ZWQgdGhlIG51bWJlciBvZiBiaW5kaW5ncwoJICBoYW5kbGluZyBGSUxFICogYW5kIFhQYXRoIGNvbnRleHRzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbTogYXZvaWQgYSBzdHVwaWQgcHJvYmxlbSBkdWUgdG8gdGhlCgkgIHVzZSBvZiBURVNULgoKV2VkIEZlYiAgNiAyMzozNzowNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIHN0dXBpZCBidWcgIzcwNzM4IGZvdW5kIGJ5IGFsZm9ucyBob29nZXJ2b3JzdAoKV2VkIEZlYiAgNiAxNzowNDo1MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vVE9ETyBweXRob24vbGlieG1sLmM6IGNsZWFudXAgdGhlIGV4dGVuc2lvbiBmdW5jdGlvbiBsb29rdXAKCSogeG1sbWVtb3J5LmMgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGFsd2F5cyBjb21waWxlIHRoZSBsaXN0CgpUdWUgRmViICA1IDE3OjMzOjMwIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBweXRob24vTWFrZWZpbGUuYW06IGRvIG5vdCBpbnN0YWxsIG91dHNpZGUKCSAgb2YgcHJlZml4CgpNb24gRmViICA0IDE1OjA1OjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9UT0RPIHB5dGhvbi9saWJ4bWwuYzogc3RhcnRlZCBhZGRpbmcgU0FYIGludGVyZmFjZXMKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9wdXNoU0FYLnB5OiBhZGRlZCBhIGJhc2ljCgkgIFNBWCB0ZXN0CgpNb24gRmViICA0IDAxOjEyOjQyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogaGFyZGVuZWQgdGhlIGFkZENoaWxkIGZ1bmN0aW9uCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi9UT0RPOgoJICBhZGRlZCBhY2Nlc3NvcnMgbmVlZGVkIGZvciB4bWxOb2RlLCBhIGJpdCBtb3JlIHRlc3RpbmcgYW5kCgkgIGV4dGVuc2lvbiBvZiBpbnRlcmZhY2VzCgkqIHB5dGhvbi90ZXN0cy9NYWtlZmlsZS5hbSBweXRob24vdGVzdHMvYnVpbGQucHk6IGFkZGVkIGEgdGVzdAoJICBidWlsZCBmcm9tIHNjcmF0Y2gvc2F2ZS9sb2FkL2NoZWNrCgpTdW4gRmViICAzIDIxOjEwOjM5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlckludGVybmFscy5jOiBjaGFuZ2UgYSBzbWFsbCBiaXQgaW4gdGhlIHdheSB2YWxpZGlkeQoJICBlcnJvciBtZXNzYWdlcyBnZXQgaW5pdGlhbGl6ZWQKCSogcHl0aG9uL1RPRE8gcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0IHB5dGhvbi9saWJ4bWxfd3JhcC5oIHB5dGhvbi90eXBlcy5jOgoJICBhZGRlZCBzb21lIG1lbW9yeSBkZWJ1Z2dpbmcgdG8gdHJhY2sgbGVha3MgYXQgdGhlIGxpYnhtbDIgbGV2ZWwKCSogcHl0aG9uL3Rlc3RzLyoucHk6IGNoYW5nZWQgYWxsIHRlc3RzIHRvIGNoZWNrIGZvciBsZWFrcywKCSAgdGhlcmUgaXMganVzdCBvbmUgbGVmdCBpbiBYUGF0aCBleHRlbnNpb24gcmVnaXN0cmF0aW9ucy4KClN1biBGZWIgIDMgMTc6NTA6NDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL1RPRE8gcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogbW9yZSBhY2Nlc3NvciBjbGFzc2VzIGZvciB0aGUgcGFyc2VyCgkgIGNvbnRleHQsIGFsbG93IHRvIHN3aXRjaCBvbiBhbmQgY2hlY2sgdmFsaWRpdHkKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9lcnJvci5weQoJICBweXRob24vdGVzdHMvaW52YWxpZC54bWwgcHl0aG9uL3Rlc3RzL3ZhbGlkLnhtbAoJICBweXRob24vdGVzdHMvdmFsaWRhdGUucHk6IGF0dGRlZCBtb3JlIHRlc3QgYW5kIGFuZCBhZGRlZCBlcnJvci5weQoJICB3aGljaCBJIGZvcmdvdCB0byBjb21taXQgaW4gdGhlIGxhc3Qgc3RlcAoKU3VuIEZlYiAgMyAxNjowMzo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL3R5cGVzLmM6IGNsZWFudXAKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkgcHl0aG9uL2xpYnhtbF93cmFwLmgKCSAgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbCAKCSAgcHl0aG9uL2xpYnhtbDJjbGFzcy50eHQ6IGFkZGVkIGNsYXNzIGZvciBwYXJzZXIgY29udGV4dCwgYWRkZWQKCSAgZmlyc3QgY3V0IGZvciBwdXNoIG1vZGUgc3VwcG9ydC4gQWRkZWQgYSBmcmFtZXdvcmsgdG8gZ2VuZXJhdGUKCSAgYWNjZXNzb3JzIGZ1bmN0aW9ucy4KCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy9wdXNoLnB5OiBhZGRlZCBhIHB1c2gKCSAgdGVzdAoKU3VuIEZlYiAgMyAwMDoxNzoyNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL1RPRE8gcHl0aG9uL2xpYnhtbC5weTogZml4ZWQgYSBzbWFsbAoJICBidWcgYSBiaXQgb2YgY2xlYW51cC4KClNhdCBGZWIgIDIgMjI6NDc6MTAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sMi1weXRob24tYXBpLnhtbAoJICBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYWRkaW5nIGVycm9yIHJlZGlyZWN0aW9ucyBhbmQgcHJlZm9ybWF0CgkgIHRvIGEgcHl0aG9uIGhhbmRsZXIKCSogcHl0aG9uL3Rlc3RzL01ha2VmaWxlLmFtIHB5dGhvbi90ZXN0cy8qLnB5OiBjbGVhbnVwIG1hZGUgYWxsCgkgIHRlc3RzIHNlbGYgY2hlY2tpbmcKClNhdCBGZWIgIDIgMTM6MTg6NTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHk6IGZpeGVkIGEgc3R1cGlkIGJ1ZyB3aGVuIHJlbmFtaW5nCgkgIGEgZnVuY3Rpb24KClNhdCBGZWIgIDIgMTE6MjU6NTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLnNwZWMuaW4gcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9UT0RPIHB5dGhvbi9nZW5lcmF0b3IucHkKCSAgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwyLXB5dGhvbi1hcGkueG1sCgkgIHB5dGhvbi9saWJ4bWwyY2xhc3MudHh0OiBQcm9ncmVzc2luZyB0aHJvdWdoIHRoZSBUT0RPcywgY2xhc3MKCSAgZGVzY3JpcHRpb24gb3V0cHV0LCBleHRyYSBYTUwgQVBJLCBSUE0gbm93IGJ1aWxkcyB0aGUgd3JhcHBlcnMKCSAgZm9yIGFsbCBweXRob24gaW5zdGFsbGVkIHZlcnNpb25zCgpTYXQgRmViICAyIDEwOjEzOjUyIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBsaWJ4bWwuc3BlYy5pbiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL1RPRE8KCSAgcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sMmNsYXNzLnR4dDogYWRkZWQgbW9yZSBpbmZvcm1hdGlvbnMKCSAgaW4gdGhlIGxpYnhtbDItcHl0aG9uIHBhY2thZ2UgaW5jbHVkaW5nIGRvY3MuIFNsaWdodGx5IGNoYW5nZWQKCSAgdGhlIGNsYXNzIGhpZXJhcmNoeQoJKiBweXRob24vdGVzdHMvKjogYWRkZWQgYmFzaWMgcmVncmVzc2lvbiB0ZXN0cyBpbmZyYXN0cnVjdHVyZSB0b28KCkZyaSBGZWIgIDEgMjM6MTE6NTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIGV4YW1wbGUvTWFrZWZpbGUuYW0gcHl0aG9uL01ha2VmaWxlLmFtOgoJICBhZGRlZCBsaWJ4bWwyLXB5dGhvbiBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlcyBpbnN0YWxsZWQKCkZyaSBGZWIgIDEgMTg6NDg6MTkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jCgkgIHB5dGhvbi9saWJ4bWwucHk6IG1vcmUgd29yaywgbm93IGFibGUgdG8gZXh0ZW5kIHRoZQoJICBYUGF0aCBpbnRlcnByZXRlciB3aXRoIGZ1bmN0aW9ucyB3cml0dGVuIGluIHB5dGhvbi4KCkZyaSBGZWIgIDEgMTA6Mjg6NTEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL01ha2VmaWxlLmFtOiBKYWNvYiBzZW50IGEgcGF0Y2ggdG8gYWxsb3cgYnVpbGRpbmcgZnJvbQoJICB0YXJmaWxlLgoKRnJpIEZlYiAgMSAwMDo0MDo0OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vTWFrZWZpbGUuYW0gcHl0aG9uL2xpYnhtbC5jIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbToKCSAgaW5zZXJ0ZWQgdGhlIHB5dGhvbiB3cmFwcGVycyBidWlsZCwgSSBob3BlIHRoaXMgd29uJ3QgYmUgdG9vCgkgIHVucG9ydGFibGUKClRodSBKYW4gMzEgMjE6Mjc6MzcgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogbWlub3Igb3B0aW1pemF0aW9uCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmg6IG1vcmUgd29yayBvbiB0aGUgcHl0aG9uIGJpbmRpbmdzLAoJICB0aGV5IG5vdyBzdXBwb3J0IFhQYXRoIGFuZCB0aGVyZSBpcyBubyBldmlkZW50IGxlYWsKClRodSBKYW4gMzEgMDA6NDg6MDYgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcHl0aG9uL2dlbmVyYXRvci5weSBweXRob24vbGlieG1sLmMgcHl0aG9uL2xpYnhtbC5weToKCSAgbW9yZSB3b3JrIG9uIHRoZSBweXRob24gYmluZGluZ3MgZ2VuZXJhdG9yLgoKV2VkIEphbiAzMCAyMTo1MToyNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBweXRob24vZ2VuZXJhdG9yLnB5IHB5dGhvbi9saWJ4bWwuYyBweXRob24vbGlieG1sX3dyYXAuaDoKCSAgbW9yZSB3b3JrIG9uIHRoZSBweXRob24gYmluZGluZ3MuCgpXZWQgSmFuIDMwIDE3OjM1OjMzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHB5dGhvbi9nZW5lcmF0b3IucHkgcHl0aG9uL2xpYnhtbC5jIHB5dGhvbi9saWJ4bWwucHkKCSAgcHl0aG9uL2xpYnhtbF93cmFwLmg6IGNvbW1pdGVkIGVhcmx5IHZlcnNpb24gb2YgYSBweXRob24gYmluZGluZwoJICBmb3IgcHJpdmF0ZSB1c2Ugb25seSBBVE0KClNhdCBKYW4gMjYgMjI6NDE6MTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaDogYXBwbGllZCBwYXRjaAoJICBmcm9tIEFudGhvbnkgSm9uZXMgdG8gaW1wbGVtZW50IGNvcHkgb2YgRFREIHN1YnRyZWUgdG9vLiBIYWQKCSAganVzdCB0byBrZWVwIDIgZnVuY3Rpb24gcHJpdmF0ZSB3aGljaCByZWFsbHkgb3VnaHQgdG8gYmVjb21lCgkgIHB1YmxpYyBvbmVzLgoKRnJpIEphbiAyNSAxNToxNDo1NSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGVkIHBvaW50ZXJzIHRvIHRoZSB3ZWIgcGFnZXMgaW4gdGhlIHVzYWdlKCkKClRodSBKYW4gMjQgMTc6MDQ6MDQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBtb3JlIGZpeGVzIGZyb20gUGV0ciBLb3plbGthIGZvciBhdHRyaWJ1dGUgaGFuZGxpbmcKCSAgaW4gdGhlIHRyZWUgQVBJIHRvIGFsaWduIHRoZSBzZW1hbnRpYyB3aXRoIERPTS4KClRodSBKYW4gMjQgMTY6MDA6NTMgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyB0cmVlLmMgZW50aXRpZXMuYzogYW5vdGhlciBzZXQgb2YgcGF0Y2hlcyBmcm9tCgkgIEFudGhvbnkgSm9uZXMgZm9yIGNvcHkgb3BlcmF0aW9ucyBjbGVhbnVwIGFuZCByb2J1c3RuZXNzCgpXZWQgSmFuIDIzIDE4OjUzOjU1IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9BUEljaHVuayouaHRtbCBkb2MvcGFyc2VkZWNsLnB5IGRvYy9hcGkueHNsOiBnZW5lcmF0ZWQKCSAgYW4gYWxwaGFiZXRpYyBpbmRleCBiYXNlZCBvbiBjb21tZW50cyBjb250ZW50CgkqIGRvYy8qOiByZWJ1aWx0IHRoZSB3ZWIgc2l0ZSB3aXRoIHRoZSBuZXcgcmVmZXJlbmNlcwoKV2VkIEphbiAyMyAxNToxNDoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuaDogR3JlZyBTamFhcmRlbWEgc3VnZ2VzdGVkIHRvIHVzZSBhbgoJICBlcG9uZW50aWFsIGJ1ZmZlciBncm90aCBwb2xpY3kgaW4geG1sUGFyc2VyQWRkTm9kZUluZm8oKQoKV2VkIEphbiAyMyAxMzozMjo0MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvYXBpLnhzbCBkb2MvQVBJY29uc3RydWN0b3JzLmh0bWwgZG9jL0FQSWZpbGVzLmh0bWwKCSAgZG9jL0FQSWZ1bmN0aW9ucy5odG1sIGRvYy9BUElzeW1ib2xzLmh0bWwgZG9jL2xpYnhtbDItcmVmcy54bWwKCSAgZG9jL3BhcnNlZGVjbC5weSBkb2MvTWFrZWZpbGUuYW06IHVwZGF0ZWQgdGhlIHB5dGhvbiBleHRyYWN0b3IKCSAgdG8gZ2VuZXJhdGUgY3Jvc3MtcmVmZXJlbmNlcywgYW5kIGFkZGVkL3VwZGF0ZWQgdGhlIHN0eWxlc2hlZXRzCgkgIHRvIGdlbmVyYXRlIGFuZCBsaW5rIEFQSSBpbmRleGVzLiBUaGUgZ2VuZXJpYyBrZXl3b3JkIGluZGV4CgkgIGlzIG5vdCBkb25lIHlldC4KCSogZG9jLyouaHRtbDogcmVnZW5lcmF0ZWQgYWxsIHRoZSB1c3VhbCBkb2NzIHRvbwoKVHVlIEphbiAyMiAyMzoxMToyNiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkZWJ1Z1hNTC5jOiBhZGRlZCBhbiB4cGF0aCBmdW5jdGlvbiB0byB0aGUgc2hlbGwgZm9yIFQuIFYuIFJhbWFuCgpUdWUgSmFuIDIyIDIyOjQyOjIzIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmM6IHBhdGNoIGZyb20gQW50aG9ueSBKb25lcyB0byBjYXRjaCBOVUxMIG5vZGVzIGluCgkgIGRlYnVnIHJvdXRpbmVzLgoKVHVlIEphbiAyMiAyMjozODo0MiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGFwcGx5IGFuIHBhdGNoIGZyb20gUGV0ciBLb3plbGthIGZvciB1bmxpbmsgYW5kIHJlcGxhY2UgCgkgIHN1cHBvcnQgb2YgYXR0cmlidXRlIG5vZGVzCgpUdWUgSmFuIDIyIDE5OjEyOjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRvYy9saWJ4bWwyLWFwaS54bWwgZG9jL3BhcnNlZGVjbC5weTogQnVpbGQgYSBuZXcgdmVyc2lvbgoJICBob3BlZnVsbHkgbmVhciBjb21wbGV0ZSBhbmQgZnVsbHkgZG9jdW1lbnRlZCBvZiB0aGUgQVBJIGluIFhNTAoJKiBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZXJyb3IuYyBnbG9iYWxzLmMgcGFyc2VyLmMgdHJlZS5jCgkgeG1sSU8uYyB4bWxtZW1vcnkuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggaW5jbHVkZS9saWJ4bWwvaGFzaC5oCgkgaW5jbHVkZS9saWJ4bWwvbGlzdC5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIGluY2x1ZGUvbGlieG1sL3RyZWUuaAoJIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIGluY2x1ZGUvbGlieG1sL3ZhbGlkLmhpCgkgaW5jbHVkZS9saWJ4bWwveG1sSU8uaCBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oaQoJIGluY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbmkKCSBpbmNsdWRlL2xpYnhtbC94cGF0aC5oIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6CgkgIENsZWFuZWQgdXAgdGhlIGRvYyBjb21tZW50cyBhIGxvdCBpbiB0aGUgcHJvY2VzcywgdGhlIGludGVyZmFjZQoJICBjb3ZlcmFnZSBpcyBub3cgMTAwJQoKVHVlIEphbiAyMiAwMDoxMjo1OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9wYXJzZWRlY2wucHk6IGltcHJvdmVkIHRoZSBzY3JpcHQgdG8KCSAgZXh0cmFjdHMgY29tbWVudHMgZnJvbSB0aGUgZ3RrLWRvYyBEb2NCb29rIG91dHB1dCAoYSBiaXQKCSAgY29udm9sdXRlZCBidXQgc2VlbXMgdG8gd29yaykuCgpNb24gSmFuIDIxIDE4OjI5OjE5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGRvYy9NYWtlZmlsZS5hbSBkb2MvbGlieG1sMi1hcGkueG1sIGRvYy9wYXJzZWRlY2wucHk6CgkgIGFkZGVkIGFuIFhNTCBkZXNjcmlwdGlvbiBvZiB0aGUgQVBJLCBtb3ZlZCB0aGUgc2NyaXB0IGdlbmVyYXRpbmcKCSAgaXQgaGVyZS4gQWRkZWQgYSAibWFrZSBhcGkiIHRhcmdldAoKTW9uIEphbiAyMSAxNDozNDozNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IEFkYW0gTG91bmRzIHBvaW50ZWQgb3V0IGEgYnVnIGluIHhtbFNlYXJjaE5zKCkKCk1vbiBKYW4gMjEgMDk6NTU6MjEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiB0aGUgY2hhbmdlIG1hZGUgdG8KCSAgeG1sWFBhdGhGdW5jTG9va3VwRnVuYyB3YXMgaW5jb21wYXRpYmxlIHJvbGwgaXQgYmFjawoKU3VuIEphbiAyMCAyMzowMzo0MSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogY2xlYW51cCBwYXRjaCBmcm9tIEFudGhvbnkgSm9uZXMKCSogZG9jL01ha2VmaWxlLmFtOiBmaXggdGhlIGhlYWRlcnMgdG8gYXZvaWQgaW4gbWFrZSBzY2FuCgkqIHBhcnNlckludGVybmFscy5jIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwvKi5oOiBjbGVhbnVwIG9mIHRoZQoJICBpbmNsdWRlcywgKiB2cyBQdHIgYW5kIGdlbmVyYWwgY2xlYW51cAoJKiBwYXJzZWRlY2wucHk6IGZpcnN0IHZlcnNpb24gb2YgYSBzY3JpcHQgdG8gZXh0cmFjdCB0aGUKCSAgbW9kdWxlIGludGVyZmFjZXMsIHRoZSBnb2FsIHdpbGwgYmUgdG8gcHJvdmlkZSAuZGVjbCBvciBYTUwKCSAgc3BlY2lmaWNhdGlvbiBvZiB0aGUgaW50ZXJmYWNlcyB0byBidWlsZCB3cmFwcGVycy4KClN1biBKYW4gMjAgMTM6Mzg6MjIgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCB4bWxjYXRhbG9nLmM6IEZpeGVkIGJ1ZyAjNjg4MzAsIHhtbGNhdGFsb2cKCSAgbm93IHByb3ZpZGVzIHJldHVybiBjb2RlcyBpbiBjYXNlIG9mIGVycm9ycwoKU2F0IEphbiAxOSAxNjozNjoyMSBDRVQgMjAwMiBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW8uaCB0cmlvLmMgdHJpb2RlZi5oIHRyaW9wLmggdHJpb25hbi5oIHRyaW9uYW4uYyBNYWtlZmlsZS5hbToKCSAgVXBncmFkZWQgdG8gdHJpbyBiYXNlbGluZSAxLjYKCSogc3RyaW8uaCBzdHJpby5jOiBSZXBsYWNlZCBieSB0cmlvc3RyLmggYW5kIHRyaW9zdHIuYwoKRnJpIEphbiAxOCAxNzoyMjo1MCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmMgeG1sSU8uYyB4bWxjYXRhbG9nLmM6IHJlbW92ZWQgdGhlIGxhc3Qgb2NjdXJlbmNlcwoJICBvZiBzdHJkdXAgdXNhZ2UgaW4gdGhlIGNvZGUKCkZyaSBKYW4gMTggMTI6NDc6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgZXJyb3IuYzogS2VpdGggSXNkYWxlIGNvbXBsYWluZWQgcmlnaHRseSB0aGF0IAoJICB4bWxJbml0UGFyc2VyKCkgZGlkIG5vdCBwcmVzZXJ2ZSB2YWx1ZSBzZXQgYnkgeG1sU2V0R2VuZXJpY0Vycm9yRnVuYwoKVGh1IEphbiAxNyAwOTo0NDo0NCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0cmVlLmM6IGZpeGVkIHRoZSBmdW54dGlvbiB0byBzZXQgdGhlIHhtbDogYXR0cmlidXRlcwoJKiBkZWJ1Z1hNTC5jOiBhZGRlZCAic2V0YmFzZSIgdG8gdGVzdCBpdC4KCldlZCBKYW4gMTYgMTY6MzY6MDggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiB1cGRhdGUgeG1sTm9kZVNldENvbnRlbnQoKSBhbmQgeG1sTm9kZVNldENvbnRlbnRMZW4oKQoJICB0byBhbGxvdyB1cGRhdGluZyBhbiBhdHRyaWJ1dGUgY29udGVudAoKVHVlIEphbiAxNSAxODowOToyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuaDogdHJ5IHRvIGF2b2lkIHByb2JsZW1zIHdoZW4gY29tcGlsaW5nIG9uIFdpbmRvd3MKCk1vbiBKYW4gMTQgMTg6NTY6MjUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaGFzaC5jOiBwYXRjaCBmcm9tIEFudGhvbnkgSm9uZXMgZm9yIGhhc2guYyBhbGxvY2F0aW9uIHNpemUKCSogTWFrZWZpbGUuYW06IHRyeWluZyB0byB3b3JrIGFyb3VuZCBZZXQgQW5vdGhlciBMaWJ0b29sIE1hZG5lc3MKCSAgYW5kIGJ1aWxkIHRoZSAyLjQuMTMgcmVsZWFzZSBmaW5hbGx5IC4uLgoKTW9uIEphbiAxNCAxODoyNzoxOSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHVwZGF0ZWQgdG8gMi40LjEzCgkqIGRvYy8qIDogdXBkYXRlIG9mIHRoZSBkb2N1bWVudGF0aW9uCgpNb24gSmFuIDE0IDE3OjUzOjQxIENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgdHJlZS5jOiBzb21lIGNsZWFudXAgYWZ0ZXIgYW4gdW5zdWNjZXNzZnVsIGF0dGVtcHQKCSAgYXQgZml4aW5nICM2MTI5MCA6LSgKClN1biBKYW4gMTMgMjE6MzA6NTQgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxTYXZlRm9ybWF0RmlsZUVuYygpIHdoZW4gZW5jb2RpbmcgPT0gTlVMTAoJICBGaXhlcyBidWcgIzY3MjI5CgpTdW4gSmFuIDEzIDE3OjE0OjA2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogdHJ5aW5nIHRvIGF2b2lkIHRyb3VibGVzIHdoZW4gYSBzdWJ0cmVlIGlzIGNvcGllZAoJICBhbmQgY29hbGVzY2VkIGluIHBhcnQgd2l0aCB0aGUgdGFyZ2V0IHRyZWUuIFNob3VsZCBmaXggCgkgIGJ1ZyAjNjc0MDcKClN1biBKYW4gMTMgMTY6Mzc6MTUgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYzogZml4ZWQgdmFsaWRhdGlvbiBvZiBhdHRyaWJ1dGVzIGNvbnRlbnQgb2YgdHlwZQoJICBOQU1FIE5BTUVTIE5NVE9LRU4gYW5kIE5NVE9LRU5TIHRvIGFjY2VwdCBpbnRlcm5hdGlvbmFsaXplZAoJICB2YWx1ZXMsIHZlcnkgb2xkIGJ1Zy4gRml4ZXMgIzY3NjcxCgpTdW4gSmFuIDEzIDE1OjA3OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oIHRyZWUuYzogaW50ZWdyYXRlZAoJICBhIGNvdXBsZSBvZiBmaXhlcyBhbmQgYSBuZXcgQVBJIGZ1bmN0aW9uIHhtbFNldEVudGl0eVJlZmVyZW5jZUZ1bmMoKQoJICBmcm9tIEtlaXRoIElzZGFsZSBhbmQgZGVkaWNhdGVkIHRvIHhzbGRiZyB0aGUgWFNMVCBkZWJ1Z2dlci4KClN1biBKYW4gMTMgMTQ6MjM6MjEgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdGhyZWFkcy5jOiBhcHBsaWVkIFNlcmd1ZWkgTmFyb2pueWkncyBwYXRjaCB0byBhZGQgbmF0aXZlCgkgIHRocmVhZCBzdXBwb3J0IG9uIHRoZSBXaW4zMiBwbGF0Zm9ybQoJKiB0ZXN0VGhyZWFkc1dpbjMyLmMgTWFrZWZpbGUuYW06IGFkZGVkIHRoZSB0ZXN0IHByb2dyYW0gYWxzbwoJICBmcm9tIFNlcmd1ZWksIFdpbjMyIHNwZWNpZmljCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjoKCSAgYWRkZWQgcGF0Y2ggZnJvbSBJZ29yIGZvciB0aGUgV2luZG93cyB0aHJlYWQgc3BlY2lmaWMgZGVmaW5lcy4KCldlZCBKYW4gIDkgMTI6NTA6MzkgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZW50aXRpZXMuYzogQW50aG9ueSBKb25lcyBwb2ludGVkIGEgYnVnIGluIHhtbENvcHlFbnRpdHkoKQoKVHVlIEphbiAgOCAxNDoyMzoyMiBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKi5odG1sIGRvYy9zaXRlLnhzbCBkb2MvTWFrZWZpbGU6IHJlbmFtZWQgWE1MLmh0bWwKCSAgb3V0cHV0IHBhZ2UgaW50byBYTUxpbmZvLmh0bWwuIENsb3NlIGJ1ZyAjNjY5NTEgYW5kCgkgIHJhaXNlZCBieSBSb2JlcnQgQ29sbGlucyB0b28uCgpUdWUgSmFuICA4IDE0OjEzOjE4IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmM6IFBhdWwgS2VvZ2ggcG9pbnRlZCBvdXQgYSBwb3NzaWJpbGl0eSBvZiBzZWdmYXVsdAoJICBvbiByZXBldGVkIHhtbEFkZEVuY29kaW5nQWxpYXMoKSAvIHhtbENsZWFudXBFbmNvZGluZ0FsaWFzKCkuCgkgIENsb3NlcyBidWcgIyA2ODIzOAoKVHVlIEphbiAgOCAxMjo0ODoyNyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvKi5odG1sOiB1cGRhdGVkIHRoZSBHZG9tZTIgbGlua3MKClR1ZSBKYW4gIDggMTE6MzI6MzAgQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLmg6IEFwcGxpZWQgZm9sbG93aW5nIHBhdGNoZXMgZnJvbSBSb2JlcnQgQ29sbGlucwoJICBhbmQgbWFrZSBzdXJlIElOX0xJQlhNTCBpcyBkZWZpbmVkIHdoZW4gY29tcGlsaW5nIGl0CgktLS0tLS0tCgkqIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbiAoTElCWE1MX0RMTF9JTVBPUlQpOiBVc2Ugb24gQ3lnd2luCgkgIGFzIHdlbGwgYXMgVmlzdWFsIEMuCgkqIHBhcnNlci5jIChYTUxfRElSX1NFUCk6IERvbid0IHVzZSAnXFwnIGZvciBDeWd3aW4uCgkqIHBhcnNlckludGVybmFscy5jIChYTUxfRElSX1NFUCk6IERvbid0IHVzZSAnXFwnIGZvciBDeWd3aW4uCgkqIHN0cmlvLmMgKFBMQVRGT1JNX1VOSVgpOiBEZWZpbmUgZm9yIEN5Z3dpbi4KCSogdHJpb2RlZi5oIChUUklPX1BMQVRGT1JNX1VOSVgpOiBEZWZpbmUgZm9yIEN5Z3dpbi4KCSogeG1sSU8uYyAoeG1sRmlsZU9wZW4pOiBVc2UgdW5peCBiZWhhdmlvdXIgZm9yIEN5Z3dpbi4KCSAgVXNlIGJpbmFyeSBtb2RlIG9wZW5zIGZvciBDeWd3aW4gKHhtbEZpbGVPcGVuVyB4bWxQYXJzZXJHZXREaXJlY3RvcnkKCSAgeG1sU3lzSURFeGlzdHMgeG1sTm9OZXRFeGlzdHMpLgoJKiB4bWxsaW50LmM6IERvbid0IGluY2x1ZGUgd2luc29jazIuaCBmb3IgQ3lnd2luLgoKTW9uIEphbiAgNyAxNzo1Mjo0OCBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYzogSmlya2EgS29zZWsgcG9pbnRlciBvdXQgYSBidWcgaW4geG1sUGFyc2VUZXh0RGVjbCgpCgkgIHdoZW4gdGhlIHZlcnNpb24gaW5mbyBpcyBub3QgcHJlc2VudC4KCk1vbiBKYW4gIDcgMDA6MDM6NTggQ0VUIDIwMDIgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBBbnRob255IEpvbmVzICBwb2ludGVkIG91dCBhIHByb2JsZW0gaW4KCSAgeG1sU3RyaW5nR2V0Tm9kZUxpc3QoKSBhbmQgcHJvdmlkZWQgYSBmaXggZm9yIGl0CgpTdW4gSmFuICA2IDEzOjQ1OjQ5IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBwYXRjaCBmcm9tIEZyYW5rIEogRnJhbmtsaW4gdG8gcmVtb3ZlIGEgYnVnIGluCgkgIHhtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KCkgd2hlbiB0aGUgaW5pdGlhbCBidWZmZXIgcGFzc2VkCgkgIGlzIGxhcmdlLgoKU2F0IEphbiAgNSAxOToyNDoyMyBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi8qOiBiaWcgY2xlYW51cCBvZiB0aGUgV2luZG93cy9NU1ZDIHByb2plY3QgZmlsZXMKCSAgZnJvbSBJZ29yIFpsYXRrb3ZpYwoKV2VkIEphbiAgMiAxNDoxMTozNSBDRVQgMjAwMiBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2MvTWFrZWZpbGUuYW06IHNob3VsZCBmaXggIzY3Njc0IGFuZCBhdm9pZCB0cm91YmxlcyBpZiAKCSAgeHNsdHByb2MgaXMgbm90IGF2YWlsYWJsZSBvciBmYWlscyBpbiB0aGUgcHJlZml4IHByb3ZpZGVkCgpUdWUgSmFuICAxIDE3OjQ4OjU2IENFVCAyMDAyIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbG1lbW9yeS5jOiBvbmUgbW9yZSBkb2MgcGF0Y2ggZnJvbSBDaGFybGllIEJvemVtYW4uCgpNb24gRGVjIDMxIDE3OjM1OjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBwYXJzZXIuYyB2YWxpZC5jIGluY2x1ZGUvbGlieG1sL3BhcnNlckludGVybmFscy5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggaW5jbHVkZS9saWJ4bWwveHBhdGhJbnRlcm5hbHMuaDoKCSAgRml4ZWQgYSBmZXcgb3RoZXIgcHJvYmxlbXMgcmFpc2VkIGJ5IENoYXJsaWUgQm96ZW1hbi4KCSogcmVzdWx0L1ZDL0VsZW1lbnRWYWxpZFs1LTddOiBmaXhlZCB0aGUgb3V0cHV0CgpNb24gRGVjIDMxIDE3OjEzOjM0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqICouYyBpbmNsdWRlL2xpYnhtbC8qLmggZG9jL2h0bWwvKjogYXBwbGllZCA0MiBkb2N1bWVudGF0aW9uCgkgIHBhdGNoZXMgZnJvbSBDaGFybGllIEJvemVtYW4uIFJlZ2VuZXJhdGVkIHRoZSBIVE1MIGRvY3MuCgpUaHUgRGVjIDIwIDE0OjU5OjUyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmggd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogZml4ZXMKCSAgZm9yIFdpbmRvd3MgZnJvbSBJZ29yCgpUdWUgRGVjIDE4IDEyOjEzOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogYXBwbGllZCBKdXN0aW4gRmxldGNoZXIgcGF0Y2ggZm9yIC0tb3V0cHV0IG9yIC1vCgpUdWUgRGVjIDE4IDA4OjUyOjMyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBjbG9zZSAjNjcwMTkKClR1ZSBEZWMgMTggMDg6MDg6NTEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBhcHBsaWVkIEp1c3RpbiBGbGV0Y2hlciBnZW5lcmljIHRpbWluZyBwYXRjaAoJICBzaW1pbGFyIHRvIHRoZSBvbmUgYWxyZWFkeSBhcHBsaWVkIHRvIHhzbHRwcm9jLgoKTW9uIERlYyAxNyAxNjoyOTowOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmggdHJlZS5jOiBhcHBsaWVkIGRvY3VtZW50YXRpb24gcGF0Y2hlcwoJICBmcm9tIENoYXJsaWUgQm96ZW1hbgoKVGh1IERlYyAxMyAyMToyNDoxNiBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSpkb2MveG1sbGludC54bWwsIHhtbGxpbnQuMSAtIGRvY3VtZW50IC0tZHJvcGR0ZAoKVGh1IERlYyAxMyAyMzoxOTo1MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXggdGhlIHhtbFN0cmR1cCgpIHVzZWQgaW4gdGhlIHByZXZpb3VzIHBhdGNoLgoJKiB2YWxpZC5jOiBhZGRlZCAtLWRyb3BkdGQKCSogdHJlZS5jOiBmaXhlZCB4bWxVbmxpbmtOb2RlIHNvIGl0IGFsc28gcmVtb3ZlcyB0aGUgcmVmZXJlbmNlcwoJICBmcm9tIHRoZSBkb2N1bWVudCBpZiB0aGUgbm9kZSBpcyBhIERURAoKVGh1IERlYyAxMyAxNTo1NDozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1MdHJlZS5jIHZhbGlkLmM6IGNsZWFudXAgc29tZSBzdGF0aWMgZGVjbGFyYXRpb25zCgpUaHUgRGVjIDEzIDE1OjIzOjA0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGxpbnQuYzogcmVtb3ZlZCBhbm90aGVyIHN0cmR1cCgpCgkqIGRvYy9GQVE6IHJlbW92ZWQgdGhlIEhQL1VYIGVudHJ5CgpUaHUgRGVjIDEzIDA5OjQ0OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGZpeCBidWcgIzY2ODE2IHdoZW4gdmFsaWRhdGluZy4KCSogeG1sbGludC5jOiBkb24ndCB1c2Ugc3lzL3RpbWUuaCBpZiBjb25maWd1cmUgZGlkIG5vdCBmb3VuZCBpdAoKTW9uIERlYyAxMCAyMTozOTo1NSBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jcy94bWxsaW50LjEsIHhtbGxpbnQueG1sLCB4bWxjYXRhbG9nLjEsIHhtbGNhdGFsb2dfbWFuLmh0bWwsCgl4bWxjYXRhbG9nX21hbi54bWwKCk1vbiBEZWMgMTAgMjI6MDY6MTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IEhpZXRhbmllbWkgSmFya2tvIHBvaW50ZWQgb3V0IHRoYXQKCSAgeG1sSW5pdE1lbW9yeSgpIHdhcyBkZWNsYXJlZCB0d2ljZQoKU3VuIERlYyAgOSAxNDo1OToyMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBnbG9iYWxzLmM6IGRvIG5vdCByZWZlcmVuY2Ugc3RyZHVwKCkgIQoJKiBjb25maWd1cmUuaW4gbGlieG1sLTIuMC5wYy5pbjogdHJ5aW5nIHRvIGZpeCB0aGUgbGlicwoJICBvZiB0aGUgdmFyaW91cyBjb25maWcgZXh0cmFjdGlvbiBtb2R1bGVzCgpGcmkgRGVjICA3IDE1OjIxOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiA6IHByZXBhcmluZyAyLjQuMTIKCSogZG9jLyogOiB1cGRhdGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpGcmkgRGVjICA3IDEyOjMyOjAwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBjbG9zZWQgYnVnICM2NjE1OQoJKiB0ZXN0VVJJLmM6IGFkZGVkIC0tZXNjYXBlIG9wdGlvbgoJKiBjb25maWd1cmUuaW46IHNvbWUgY2xlYW51cCBmb3IgeG1sMi1jb25maWcgLS1jZmxhZ3MKClRodSBEZWMgIDYgMTU6MzE6MzAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZ2xvYmFscy5jIHRlc3RUaHJlYWRzLmM6IHJlbW92ZWQgc29tZSBtaXNwbGFjZWQgaW5jbHVkZXMKCSAgb2YgeG1sdmVyc2lvbi5oCgpUaHUgRGVjICA2IDA5OjA2OjA4IEVTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRocmVhZHMuYzogcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24gZml4aW5nIGEgcG9zc2libGUKCSAgcHJvYmxlbSBhdCBpbml0aWFsaXphdGlvbiB0aW1lLgoKV2VkIERlYyAgNSAxMzowMTozNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gbGlieG1sLmggcGFyc2VyLmMgdGVzdFRocmVhZHMuYyBtYWNvcy86IGludGVncmF0ZWQKCSAgRXJpYyBMYXZpZ25lIGNvbnRyaWJ1dGlvbiB0byBidWlsZCBsaWJ4bWwyIG9uIE1hY09TIHVzaW5nCgkgIENvZGVXYXJyaW9yLgoKVHVlIERlYyAgNCAxNDoxMzo0NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFwcGxpZWQgR2VlcnQgS2xvb3N0ZXJtYW4ncyBwYXRjaCB0byBmaXgKCSAgLS1yZXBlYXQgLS10aW1pbmcgb3V0cHV0CgpUaHUgTm92IDI5IDE3OjEwOjIyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBSb2JpbiBCZXJqb24gPHJvYmluQGtub3dzY2FwZS5jb20+IGZvdW5kIGEgY2FzZQoJICB3aGVyZSBub24td2VsbGZvcm1lZCBYTUwgZGVjbGFyYWN0aW9ucyB3ZXJlIG5vdCBkZXRlY3RlZC4KCldlZCBOb3YgMjggMTU6NDE6NDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBvaW50ZXIuYzogZml4ZWQgYSBjb21waWxhdGlvbiBidWcgcG9pbnRlZCBieSBEYW5ueSBKYW1zaHkKCldlZCBOb3YgMjggMTA6MDk6NTEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sSU8uYzogYXMgcm9iZXJ0IHBvaW50ZWQgYWdhaW4sIHhtbElucHV0Q2FsbGJhY2tJbml0aWFsaXplZAoJICBnZXRzIHJlc2V0IGJ5IHhtbENsZWFudXBJbnB1dENhbGxiYWNrcygpIGFuZCB0aGlzIG1ha2VzIHRoZQoJICBmdW5jdGlvbiB1c2VsZXNzLiBTYW1lIGZvciBvdXRwdXQuCgpUdWUgTm92IDI3IDE3OjIyOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IHJvYmVydCBwb2ludGVkIG91dCBhIGxvb3AgZXJyb3IgaW4gY2FsbGJhY2sgY2xlYW51cHMKCk1vbiBOb3YgMjYgMTY6NTY6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmg6CgkgIG1vdmVkIHhtbEdldExpbmVObygpIGFuZCB4bWxHZXROb2RlUGF0aCgpIGludG8gdGhlIG1haW4gdHJlZSBtb2R1bGUsCgkgIHRoZXkgYXJlIG5vdCByZWFsbHkgdGllZCB0byBkZWJ1Z2dpbmcKCk1vbiBOb3YgMjYgMTE6MzE6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiBwcmVwYXJpbmcgMi40LjExCgkqIHhtbGxpbnQuYzogYmV0dGVyIC0tY2F0YWxvZ3MgZGVzY3JpcHRpb24KClN1biBOb3YgMjUgMTE6MzQ6MjQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBmaXhlZCBhIGNvdXBsZSBvZiBwcm9ibGVtcyBpbiB4bWxTZXRQcm9wKCkKClRodSBOb3YgMjIgMTk6MTk6MTAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYyB0cmVlLmMgeG1sSU8uYyB4bWxtZW1vcnkuYzogc29tZSBjbGVhbnVwcyB3aGVuIGNoYXNpbmcKCSAgdW5hcHByb3ByaWF0ZSBzdGRvdXQgb3V0cHV0LgoKVGh1IE5vdiAyMiAxMzo1ODoxNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IEZpeGVkIGEgY291cGxlIG9mIG1hY3JvIGVycm9ycyBwb2ludGVkIG91dAoJICBieSBEZW5pcyBCZXVyaXZlLCBjbG9zZXMgIzY1MTExCgpUdWUgTm92IDIwIDEwOjM0OjAxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGluIGNhc2Ugb2YgY29udGVudCBtb2RlbCB2YWxpZGl0eSBlcnJvciwgZG9uJ3QKCSAgcHJpbnQgaXQgaWYgdmFsaWRpdHkgd2FybmluZ3Mgd2VyZSBub3QgcmVxdWVzdGVkLgoKVHVlIE5vdiAyMCAwOTozMDowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBuYW5vZnRwLmM6IGFwcGxpZWQgYSBjb3VwbGUgb2YgcGF0Y2hlcyBmcm9tIEJyaWFuIEQgUmlwbGV5LgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogcmVtb3ZlZCB0aGUgbGFzdCBleGl0KCkgY2FsbC4gUHJpbnQgYW4KCSAgdW5tYXNrYWJsZSBlcnJvciBvbiBzdGRlcnIgaW5zdGVhZCAobGlicmFyeSBtaXNtYXRjaCBkZXRlY3Rpb24pCgpTYXQgTm92IDE3IDE3OjE2OjUxIE1TVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKiBkb2MveG1sbGludC54bWwsIGRvYy94bWxsaW50LjEgLSB1cGRhdGUgeG1sbGludCBtYW4gcGFnZSB3aXRoCglzaGVsbCBpbnN0cnVjdGlvbnMgZnJvbSBIZWlrbyBSdXBwCgpUaHUgTm92IDE1IDE0OjUzOjQyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogdXNlIHRoZSBVUkwgbm90YXRpb24gZmlsZTovLyBmb3IgZGVmYXVsdCBjYXRhbG9nIHBhdGhzCgpXZWQgTm92IDE0IDE2OjAzOjAyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYmV0dGVyIGNvbW1lbnRzIGZvciBfcHJpdmF0ZSBmaWVsZHMKCSogdHJlZS5jOiByZW1vdmVkIGEgcHJvYmxlbSB3aGVuIGNvcHlpbmcgYW4gZW50aXR5IHJlZmVyZW5jZS4KClR1ZSBOb3YgMTMgMTY6MjM6MDQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdm1zLyo6IHVwZGF0ZWQgaW5zdHJ1Y3Rpb25zIGFuZCBkaWZmcyBmcm9tIEpvaG4gQSBGb3RoZXJpbmdoYW0KCk1vbiBOb3YgMTIgMjM6NDM6MjIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwveG1sZXJyb3IuaDogYXZvaWQgYW4gaW5jbHVkZSBwcm9ibGVtIGlmCgkgICNpbmNsdWRlIDxsaWJ4bWwveG1sZXJyb3IuaD4gaGFwcGVucyBmaXJzdCBpbiBjb2RlCgkgIHNlZW1zIHRvIGJlIHRoZSBjYXNlIGluIEtERSBsaWJzCgpNb24gTm92IDEyIDIyOjMyOjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC8qIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiB1cGRhdGUKCSAgZnJvbSBJZ29yIGZvciBXaW5kb3dzCgpNb24gTm92IDEyIDEwOjE5OjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBHYXJ5IFBlbm5pbmd0b24gcG9pbnRlZCBvdXQgYSBtaXNzaW5nIHByZWZpeAoKU2F0IE5vdiAxMCAxMjo1NTo0MiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHByZXBhcmluZyAyLjQuMTAKCSogZG9jLyo6IHVwZ3JhZGVkIGFuZCByZWJ1aWx0IHRoZSBkb2NzCgpTYXQgTm92IDEwIDEyOjMzOjM4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4IGNvbW1lbnQgaW4gc2NyaXB0cyBlbGVtZW50IHBhcnNpbmcuCgkqIHJlc3VsdC9IVE1ML2RvYzMqOiB1cGRhdGVkIHRoZSByZXN1bHRzLgoKU2F0IE5vdiAxMCAxMToxODoxOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYzogYW5vdGhlciBVUkkgYnVnIGZpeCAjNjMzMzYsIHVzaW5nIEpvZWwgWW91bmcgcGF0Y2guCgpTYXQgTm92IDEwIDExOjA3OjI2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaDogYWRkIHhtbEdldE5vZGVQYXRoKCkKCSAgYSBjbGVhbmVkIHVwIHZlcnNpb24gb2YgdGhlIFB3ZCBzaGVsbCBzdHJpbmcgZ2VuZXJhdGlvbi4KCkZyaSBOb3YgIDkgMDA6MzQ6MTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdmFsaWQuYyBpbmNsdWRlL2xpYnhtbC90cmVlLmg6IHRyeWluZyB0byBmaXggbmFtZXNwYWNlcyArCgkgIHZhbGlkYXRpb24gcHJvYmxlbXMgZm9yIGdvb2QsIGNsb3NpbmcgIzYzNjE5IGluIHRoZSBwcm9jZXNzCgkqIHJlc3VsdC92YWxpZC9kaWEueG1sIHRlc3QvdmFsaWQvZGlhLnhtbDogdGhlIERpYSB0ZXN0IHdhcwoJICB3cm9uZyBpbiB0aGlzIHJlc3BlY3QsIGZpeGVkIGl0LgoKVGh1IE5vdiAgOCAxODozMTo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IE1vcnVzIFdhbHRlciBwYXRjaCB0byBhbGxvdyAtLWZvcm1hdCBhbmQgLS1lbmNvZGUKClRodSBOb3YgIDggMTQ6NTI6MTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogU3RlZmFuIEtvc3QgcHJvdmlkZWQgYW4gaGVscCBjb21tYW5kIGZvciB0aGUgc2hlbGwKCldlZCBOb3YgIDcgMTQ6MzI6NTUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogSGVpa28gUnVwcCBwb2ludGVkIHRoYXQgdGhlIHNoZWxsIHdvdWxkIGNyYXNoCgkgIG9uIGVtcHR5IG5vZGVzZXRzIHJldHVybnMuCgpXZWQgTm92ICA3IDEzOjUyOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBXZWlxaSBHYW8gcG9pbnRlZCBvdXQgdGhhdCB4bWxjYXRhbG9nCgkgIG1pZ2ggbmVlZCB0aGUgaGlzdG9yeSBsaWJyYXJpZXMKClR1ZSBOb3YgIDYgMjM6NDk6MDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHBhcnNlci5jIHRlc3QvSFRNTC9sdC5odG1sIHJlc3VsdC9IVE1ML2x0Lmh0bWwqOgoJICBoYW5kbGUgdGhlIGNhc2Ugb2YgPCBpbiBxdW90ZWQgYXR0cmlidXRlcywgQmFzdGlhbiBLbGVpbmVpZGFtCgpUdWUgTm92ICA2IDE2OjIxOjMzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogcmVsZWFzaW5nIDIuNC45CgkgIGZpeGluZyBjYXRhbG9nIGJyZWFrYWdlcwoJKiBNYWtlZmlsZS5hbSBjYXRhbG9nLmMgcmVzdWx0L2NhdGFsb2dzL2NhdGFsIAoJICByZXN1bHQvY2F0YWxvZ3MvbXljYXRhbG9nLiogdGVzdC9jYXRhbG9ncy9jYXRhbCo6CgkgIGZpeGVkIG1vcmUgcHJvYmxlbXMgaW4gY2F0YWxvZyBzdXBwb3J0LCBhZGRlZCBtb3JlIHJlZ3Jlc3Npb24gdGVzdHMKCSAgZm9yIGJvdGggWE1MIGFuZCBTR01MIGNhdGFsb2cgaGFuZGxpbmcKCk1vbiBOb3YgIDUgMjA6MjY6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZGVidWdYTUwuYzogYXBwbGllZCBhbiBpbXByb3ZlbWVudCB0byB4bWxHZXRMaW5lTm8oKSBmcm9tCgkgIEtlaXRoIElzZGFsZQoKTW9uIE5vdiAgNSAxNToyMDoxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGRvaGhoaCBYTUwgY2F0YWxvZyBhZGQgYW5kIHJlbW92ZSBvcHMgd2VyZSBicm9rZW4gdG9vLgoJICBTaWRlIGVmZmVjdCBvZiB0aGUgcHJvZ3Jlc3NpdmUgY2F0YWxvZyBsb2FkaW5nCgpNb24gTm92ICA1IDEyOjQwOjU0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBjb25mZXhlY2RpciBhbmQgY29uZmV4ZWNfREFUQSB3ZXJlIGRlZmluZWQgdHdpY2UKCSAgcG9pbnRlZCBvdXQgYnkgS2FybCBFaWNod2FsZGVyCgpTdW4gTm92ICA0IDIzOjE4OjM0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbGNhdGFsb2cuYzogYXZvaWQgdW5saW5rKCkgYW5kIHVzZSByZW1vdmUoKSBpbnN0ZWFkLgoKU3VuIE5vdiAgNCAyMzoxMjozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwuc3BlYy5pbjogY2xlYW51cAoJKiBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDogdXBkYXRlZCB3aXRoIDIuNC44CgpTdW4gTm92ICA0IDIxOjE3OjI0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGVuY29kaW5nLmMgZ2xvYmFsLmRhdGEgZ2xvYmFscy5jIHRlc3RUaHJlYWRzLmM6IGZpeCBidWcgIzYzNzUyCgkgIG9mIGNvbXBpbGluZyBsaWJ4bWwgd2l0aCBhIG5vbiBzdGFuZGFyZCBzZXQgb2Ygb3B0aW9ucwoKU3VuIE5vdiAgNCAxMzoxMTo0MSBNU1QgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0CgoJKiBkb2MveG1sbGludC54bWwsIHhtbGxpbnQuMSAtIHVwZGF0aW5nIHhtbGxpbnQgbWFuIHBhZ2UgdG8KCWRvY3VtZW50IC0tc2dtbCBvcHRpb24sIGZpeGluZyBnbm9tZSBidWd6aWxsYSAjNjMzODIKClN1biBOb3YgIDQgMjA6NTY6NTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGNhdGFsb2cuYzogRml4ZWQgU0dNTCBjYXRhbG9ncwoJICBicmVha2FnZSBvZiAyLjQuNywgYWRkZWQgYSBjb3VwbGUgb2YgcmVhbGx5IG5lZWRlZCBBUElzCgkgIGxpa2UgeG1sQ2F0YWxvZ0lzRW1wdHkoKSBhbmQgeG1sTmV3Q2F0YWxvZygpCgkqIHhtbGNhdGFsb2cuYzogdXBkYXRlZCAtLXNnbWwgLS1ub291dCB0byBiZSBhIHN1aXRhYmxlIHJlcGxhY2VtZW50CgkgIGZvciBpbnN0YWxsLWNhdGFsb2cKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjgKClRodSBOb3YgIDEgMTU6Mjk6MzEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogSFRNTHRyZWUuYyB0cmVlLmMgaW5jbHVkZS9saWJ4bWwvSFRNTHRyZWUuaAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogbW9yZSBpbmNsdWRlCgkgIGNsZWFudXBzLCBleHBvcnQgY2xlYW5seSBvbmUgaHRtbCBvdXRwdXQgKyBmb3JtYXQgZnVuY3Rpb24uCgpUaHUgTm92ICAxIDE0OjEyOjEyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiByZW1vdmVkIGluaXRHZW5lcmljRXJyb3JEZWZhdWx0RnVuYyBjYWxsIGZyb20KCSAgeG1sSW5pdFBhcnNlcigpIHNpbmNlIGl0IGNvdWxkIGRlc3Ryb3kgcHJldmlvdXMgY2FsbHMgdG8KCSAgeHNsdFNldEdlbmVyaWNFcnJvckZ1bmMoKSBlZmZlY3RzCgpUaHUgTm92ICAxIDA5OjM3OjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGRlYnVnWE1MLmMgaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaDogYm9vbCBjYW4gYmUgYSByZXNlcnZlZAoJICBrZXl3b3JkLgoKV2VkIE9jdCAzMSAxODo1MDowOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbTogY2xlYW51cAoJKiB0aHJlYWRzLmM6IGNsZWFudXAgdG9vCgkqIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogYWRkZWQgeG1sTm9OZXRFeHRlcm5hbEVudGl0eUxvYWRlcigpCgkgIGZyb20geHNsdHByb2MKCSogaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiB0cnlpbmcgdG8gYnJlYWsgYQoJICBkZXBlbmRlbmN5IGxvb3AuCgpUdWUgT2N0IDMwIDE4OjM4OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogSnVzdGluIEZsZXRjaGVyIHBvaW50ZWQgb3V0IHRoYXQgeG1sUGFyc2VYTUxDYXRhbG9nCgkgIHdhcyBub3QgdXNlZCBhbnltb3JlICEKClR1ZSBPY3QgMzAgMTM6MzM6MTMgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgMi40LjcKCSogTWFrZWZpbGUuYW0gZG9jL01ha2VmaWxlLmFtOiBzd2l0Y2hlZCB0byB0aGUgbGF0ZXN0IHhtbGxpbnQKCSAgbWFudWFsIHBhZ2UgZnJvbSBKb2huCgkqIGRvYy8qOiB1cGRhdGVkIHRoZSBkb2MgYW5kIHJlYnVpbHQgdGhlIGdlbmVyYXRlZCBwYWdlcwoKVHVlIE9jdCAzMCAxMTozMToxOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxJTy5jOiBjbG9zaW5nIGJ1ZyAjNjI3MTEsIHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlcgoJICBjbG9zZSBzdGRpbiBvciBzdGRvdXQuCgpUdWUgT2N0IDMwIDEwOjQ2OjEyIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBzZWNvbmQgcGFzcyBhdCBmaXhpbmcgIzYzMzM2LCB1c2luZyBKb2VsIFlvdW5nCgkgIGZpbmFsIHBhdGNoLiBsb29rcyBva2F5LgoKVHVlIE9jdCAzMCAwMDo1NjowNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB1cmkuYyBpbmNsdWRlL2xpYnhtbC91cmkuaDogdHJ5aW5nIHRvIGNsZWFyICM2MzMzNgoJICBhbGxvd2luZyB0aGUgZXNjYXBpbmcgcm91dGluZSB0byBwYXJzZSB1bmNvbmZvcm1hbnQKCSAgVVJJLVJlZmVyZW5jZXMuCgpNb24gT2N0IDI5IDE5OjA5OjQ2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZtcy9yZWFkbWUudm1zIHZtcy9idWlsZF9saWJ4bWwuY29tIG5hbm9mdHAuYyAKCSAgaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluOiBhIGZldyBWTVMgdXBkYXRlcyBmcm9tCgkgIEpvaG4gQSBGb3RoZXJpbmdoYW0KCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaCB4bWxJTy5jOiBhZGRlZCB4bWxDbGVhbnVwSW5wdXRDYWxsYmFja3MoKQoJICBhbmQgeG1sQ2xlYW51cE91dHB1dENhbGxiYWNrcygpIGZvciB0aGUgUGVybCBiaW5kaW5nIHBlb3BsZS4KCk1vbiBPY3QgMjkgMTI6NDQ6MTcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmMgZ2xvYmFscy5jIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgZXJyb3IuYzoKCSAgYXBwbHkgZml4ZXMgdG8gY2xvc2UgIzYzMjcxIGFuZCBhdm9pZCBzZWdmYXVsdHMgd2hlbgoJICB0aGUgZXJyb3Igcm91dGluZSBnZXRzIGNhbGxiZWQgYmVmb3JlIHhtbEluaXRQYXJzZXIoKQoJICBnZXQgY2FsbGVkLgoJKiBuYW5vZnRwLmMgZXJyb3IuYzogQXBwbGllZCBwYXRjaGVzIGZyb20gSnVzdGluIEZsZXRjaGVyCgkgIGNvcnJlY3Rpbmcgc29tZSB4bWxHZW5lcmljRXJyb3IgbWlzdXNlcy4KClNhdCBPY3QgMjcgMTQ6MDQ6NDUgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL3htbGxpbnQueG1sLCBkb2MveG1sbGludC4xCglOZXcgYW5kIGltcHJvdmVkIG1hbiBwYWdlIGZvciB4bWxsaW50IC0gLnhtbCBpcyB0aGUgb3JpZ2luYWwsIC4xCglpcyB0aGUgZ2VuZXJhdGVkIG1hbiBwYWdlCgpXZWQgT2N0IDI0IDE0OjM0OjI1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBkb2Mvc2l0ZS54c2wgZG9jLyouaHRtbCBkb2MvTWFrZWZpbGUuYW06IG5vdyBhdXRvZ2VuZXJhdGUKCSAgdGhlIHdlYiBzaXRlIGZyb20gdGhlIG1haW4gSFRNTCBkb2N1bWVudC4KClR1ZSBPY3QgMjMgMTQ6MzI6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHBhcnNlci5jOiBmaXhlZCBhbiBlcnJvbmVvdXMgdmFsaWRhdGlvbiBidWcgd2hlbiBQRSByZWZzCgkgIG9jY3VycyBpbiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgcmVmZXJlbmNlZCBmcm9tIHRoZQoJICBpbnRlcm5hbHMgc3Vic2V0CgkqIHRlc3QvdmFsaWQvaW5kZXgueG1sIHRlc3QvdmFsaWQvZHRkcy9uaXRmLTItNS5kdGQKCSAgdGVzdC92YWxpZC9kdGRzL05ld3NNTHYxLjAuZHRkIHJlc3VsdC92YWxpZC9pbmRleC54bWwqOgoJICBhZGRlZCB0aGUgYXNzb2NpYXRlZCB0ZXN0Y2FzZSwgaXQncyBhIG5pY2Ugb25lLgoJKiBIVE1McGFyc2VyLmM6IGdlbmVyYXRlIHRoZSBEVEQgbm9kZSBhcyBIVE1MIHN0aWxsIC4uLgoJKiBIVE1MdHJlZS5jOiBmaXhlZCBlcnJvcnMgaW4gU2V0L0dldE1ldGFFbmNvZGluZyAKCk1vbiBPY3QgMjIgMTQ6MjA6MTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYSBidWcgaW4gaHRtbE5ld0RvYygpCgpNb24gT2N0IDIyIDExOjMyOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB0ZXN0L3RocmVhZHMvKjogYWRkZWQgZW50aXRpZXMgdGVzdGluZyB0byB0aGUgVGhyZWFkIHRlc3QKCSogdGVzdFRocmVhZHMuYzogbWFrZSB0aGUgdGVzdCByZWFzb25hYmxlCgkqIERPQ0JwYXJzZXIuYzogZml4IHRoZSBEVEQgcHVibGljIGFuZCBzeXN0ZW0gSUQKCSogeG1sbGludC5jOiBhZGRlZCAtLXNnbWwgZm9yIFNHTUwgRG9jQm9vayBpbXBvcnRpbmcKCSogTWFrZWZpbGUuYW06IGFkZGVkIERvY2J0ZXN0cyB0YXJnZXQKCkZyaSBPY3QgMTkgMTE6NDc6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIG5hbm9mdHAuYzogdXNlIG9ubHkgImFub255bW91c0AiIHN0cmluZyBmb3IgYW5vbnltb3VzIHBhc3N3ZHMKCSogdGVzdFRocmVhZHMuYzogcmVtb3ZlZCBib2d1cyBpbmNsdWRlCgpUaHUgT2N0IDE4IDE2OjU2OjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyB2YWxpZC5jIHJlc3VsdC92YWxpZC9yc3MueG1sIHJlc3VsdC92YWxpZC9yc3MueG1sLmVycjoKCSAgZml4ZWQgYSB2ZXJ5IHNlcmlvdXMgKGxvb3BpbmcpIHZhbGlkYXRpb24gYnVnCgpXZWQgT2N0IDE3IDExOjU2OjI1IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBpbmNsdWRlL2xpYnhtbC90aHJlYWRzLmggdGhyZWFkcy5jCgkgIHRlc3RUaHJlYWRzLmM6IGZhciBtb3JlIHRlc3RpbmcsIGNsZWFuaW5nIHVwIGJ1Z3MKCSogKi5jIDogbWFrZSBzdXJlIGdsb2JhbHMuaCBpcyBhbHdheXMgaW5jbHVkZWQuCgpXZWQgT2N0IDE3IDE3OjQxOjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmM6IHRyeSB0byBnZXQgcmlkIG9mIHBhcnNlciBsb29wcyBmb3IgZ29vZC4KCldlZCBPY3QgMTcgMTM6Mjk6MDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgc29tZSBidWdzIGluIENGTEFHUyBwYXNzaW5nLgoJKiB0ZXN0L3RocmVhZHMgTWFrZWZpbGUuYW0gdGVzdFRocmVhZHMuYzogYWRkZWQgYSBzcGVjaWZpYwoJICB0aHJlYWRlZCB0ZXN0IGNhc2UgKHJlYWxseSBuYXN0eSwgZ3VhcmFudGVlZCkuCgpUdWUgT2N0IDE2IDIzOjAxOjQ5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IHNlcmlvdXMgY2xlYW51cCBvbiB0aGUgbWFuYWdlbWVudCBvZiB0aGUKCSAgWE1MIGNhdGFsb2cgdHJlZSwgbW9yZSB0ZXN0cyBkb25lLCBlc3BlY2lhbGx5IHdpdGgKCSAgdGhlIGNhdGFsb2cgUEkuCgpUdWUgT2N0IDE2IDA4OjQzOjQzIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogYXZvaWQgYSBwcm9ibGVtIGluIGNhdGFsb2cgY2xlYW51cCBvbiBTTVAgaWYKCSAgY2F0YWxvZ3Mgd2VyZSBub3QgaW5pdGlhbGl6ZWQuCgpUdWUgT2N0IDE2IDE0OjMzOjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgeHBhdGguYzogdHJ5aW5nIHRvIGNsZWFudXAgdGhlIG5vdCB0aHJlYWQgc2FmZQoJICBwYXJ0cyBvZiB0aGUgbGlicmFyeS4KCk1vbiBPY3QgMTUgMTQ6MzA6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBjb25maWd1cmUuaW4gZ2xvYmFsLmRhdGE6IG1ha2UKCSAgdGhlIGFsbG9jYXRpb24gYmUgcGVyLXRocmVhZCBhIGNvbmZpZ3VyZSBvcHRpb24KCSogZW5jb2RpbmcuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogZml4ZWQgY29tcGlsYXRpb24KCSAgZXJyb3JzCgpNb24gT2N0IDE1IDEyOjQ1OjAzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogTm9ybSByZXBvcnRlZCB0aGF0IGEgZmV3IGxpbmVzCgkgIGFkZGVkIHdlcmUgYnJlYWtpbmcgbGlieHNsdCBjb21waWxlLCByZW1vdmVkIHRoZW0gZm9yIG5vdwoKU3VuIE9jdCAxNCAwNTo1NTowMSBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0aHJlYWRzLmM6IGRlYnVnZ2VkIGFuZCBmaXhlZAoJICBpbml0aWFsaXphdGlvbiBwcm9ibGVtcyB3aGljaCB3ZXJlIGdpdmluZyB0cm91YmxlcyBvbiBTTVAKCSAgYm94ZXMuCgpTYXQgT2N0IDEzIDE2OjE3OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogbWlzc2luZyBnbG9iYWxzLmgKClNhdCBPY3QgMTMgMTQ6MTU6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGdsb2JhbHMuYzogYWRkZWQgYSBjb3VwbGUgb2Ygc3RhbmRhcmQgaW5jbHVkZXMuCgpTYXQgT2N0IDEzIDExOjA4OjIwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9TQVguaCBpbmNsdWRlL2xpYnhtbC9nbG9iYWxzLmggaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmgKCSAgaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvdHJlZS5oCgkgIGluY2x1ZGUvbGlieG1sL3htbGVycm9yLmggSFRNTHBhcnNlci5jIFNBWC5jIGVycm9yLmMgZ2xvYmFscy5jCgkgIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jIHRlc3REb2Nib29rLmMKCSAgdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdHJlZS5jIHVyaS5jIHhsaW5rLmMgeG1sbWVtb3J5LmM6CgkgIEFwcGxpZWQgdGhlIGxhc3QgcGF0Y2hlcyBmcm9tIEdhcnksIGNsZWFudXAsIGFjdGl2YXRlZCB0aHJlYWRpbmcKCSAgYWxsIHVzZXIgYWNjZXNzaWJsZSBnbG9iYWwgdmFyaWFibGVzIGFyZSBub3cgaGFuZGxlZCBpbiBnbG9iYWxzLltjaF0KCSAgU3RpbGwgYSBiaXQgcm91Z2h0IGJ1dCBtYWtlIHRlc3RzIHBhc3NlcyB3aXRoIGVpdGhlciAKCSAgLS13aXRoLXRocmVhZHMgZGVmaW5lZCBhdCBjb25maWd1cmUgdGltZSBvciBub3QuCgkqIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IGFkZGVkIGdsb2JhbHMuW2NoXSBhbmQgdGhyZWFkcwoJICBsaW5raW5nIG9wdGlvbnMKCkZyaSBPY3QgMTIgMTk6MjU6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtCgkgIGluY2x1ZGUvbGlieG1sL2dsb2JhbHMuaCBnbG9iYWxzLmMgIGluY2x1ZGUvbGlieG1sL3RocmVhZHMuaAoJICB0aHJlYWRzLmMgYnVpbGRfZ2xvYi5weSBnbG9iYWwuZGF0YSB4bWxjYXRhbG9nLmMgYWNjb25maWcuaAoJICBjb25maWd1cmUuaW46IHN0YXJ0ZWQgaW50ZWdyYXRpbmcgdGhlIGNvcmUgb2YgdGhlIHRocmVhZCBzdXBwb3J0CgkgIG5vdCBhY3RpdmF0ZWQgeWV0IGJ1dCBoYWxmIGludGVncmF0ZWQuIFRoZSBjb2RlIHNob3VsZCBzdGlsbAoJICBjb21waWxlIGFuZCB3b3JrIGFueXdheS4KCkZyaSBPY3QgMTIgMDA6NTM6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIEhUTUx0cmVlLmMgY2F0YWxvZy5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBuYW5vZnRwLmMKCSAgcGFyc2VyLmMgdmFsaWQuYyB4bWxtZW1vcnkuYyB4cGF0aC5jIHhwb2ludGVyLmM6IHN0YXJ0ZWQKCSAgaW50ZWdyYXRpbmcgdGhlIG5vbi1jb250cm92ZXJzaWFsIHBhcnRzIG9mIEdhcnkgUGVubmluZ3RvbgoJICBtdWx0aXRocmVhZCBwYXRjaGVzCgkqIGNhdGFsb2cuYzogY29ycmVjdGVkIGEgc21hbGwgYnVnIGludHJvZHVjZWQKClRodSBPY3QgMTEgMjA6NTg6MTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYyBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmg6IHZlcnkgc2VyaW91cyBjbGVhbnVwLAoJICBpc29sYXRpbmcgdW5wb3J0YWJsZSBjb2RlIGFuZCBhcyBtdWNoIGFzIHBvc3NpYmxlIHRoZSBhY2Nlc3NlcwoJICB0byB0aGUgZ2xvYmFsIHNoYXJlZCBjYXRhbG9nLiBNYXkgbmVlZCBtb3JlIHRlc3RpbmcgIQoKVGh1IE9jdCAxMSAxMToxMDozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvZGVidWdYTUwuaCBkZWJ1Z1hNTC5jIHRyZWUuYzogaW50ZWdyYXRpbmcKCSAgS2VpdGggSXNkYWxlIHBhdGNoZXMgZm9yIHRoZSBYU0xUIGRlYnVnZ2VyIGludGVyZmFjZXMuIFNvbWUKCSAgY2xlYW51cAoKVGh1IE9jdCAxMSAwODo0NDowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvTWFrZWZpbGUubWluZ3c6IHVwZGF0ZSBmcm9tIFRvYmlhcyBQZXRlcnMgZm9yIDIuNC41CgkqIERPQ0JwYXJzZXIuYzogZ2VuZXJhdGUgbGluZSBudWJlcnMgaW4gZWxlbWVudHMKCldlZCBPY3QgMTAgMTE6MzU6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIDIuNC42IHJlbGVhc2UKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvY3MKCSogaW5jbHVkZS9saWJ4bWwvKi5oICouYzogZml4ZWQgYSBudW1iZXIgb2YgdGVoL3RoZSB3aWRodC93aWR0aCB0eXBvcwoKTW9uIE9jdCAgOCAyMDozODoyNyBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZy4xLCB4bWxjYXRhbG9nX21hbi5odG1sCglhZGRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgRFYncyBzdXBlcmNhdGFsb2cgc3VwcG9ydAoKTW9uIE9jdCAgOCAxNzowMDoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGNhdGFsb2cuYyB4bWxjYXRhbG9nLmM6IGFkZGluZyBTR01MCgkgIHN1cGVyIGNhdGFsb2cgc3VwcG9ydCBhZGRpbmcgb25lIEFQSSBhbmQgb25lIGZsYWcgLS1zZ21sIHRvCgkgIHhtbGNhdGFsb2cKClN1biBPY3QgIDcgMTY6NDM6NTcgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2cuMQoJT25lIG1vcmUgY3JhY2sgYXQKCWh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTQzOTIgCgpTdW4gT2N0ICA3IDE4OjQ3OjAyIENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogeHBhdGguYzogaW1wbGVtZW50ZWQgeG1sWFBhdGhPYmplY3RDb3B5IGZvciBleHRlcm5hbCBvYmplY3RzCgkqIGluY2x1ZGUvbGlieG1sL3hwYXRoSW50ZXJuYWxzLmg6IGFkZGVkIHhtbFhQYXRoU3RhY2tJc0V4dGVybmFsCgpTYXQgT2N0ICA2IDE2OjI1OjUyIE1EVCAyMDAxIEpvaG4gRmxlY2sgPGpmbGVja0BpbmtzdGFpbi5uZXQ+CgoJKmRvYy94bWxjYXRhbG9nX21hbi54bWwsIHhtbGNhdGFsb2dfbWFuLmh0bWwsIHhtbGNhdGFsb2cuMQoJZmluaXNoaW5nIHVwIGZpeCB0bwoJaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NDM5MiwgbWFraW5nCgl0aGUgeG1sY2F0YWxvZyBtYW4gcGFnZSBkaXNwbGF5IG1vcmUgZWxlZ2FudGx5CgpTYXQgT2N0ICA2IDE1OjI3OjEyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGNsb3NpbmcgYnVnICM2MTgzMgoJKiBIVE1McGFyc2VyLmM6IHJlbW92ZWQgYSB3YXJuaW5nCgpTYXQgT2N0ICA2IDE1OjA3OjE0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cGF0aC5jOiBmaXhpbmcgIzYxNjczIHBhcnQgSSwgZG8gbm90IGxvb3NlIGRvYyBpbmZvcm1hdGlvbgoJICB3aGVuIGNvcHlpbmcgcmVzdWx0IHZhbHVlIHRyZWVzLgoKU2F0IE9jdCAgNiAxMTo1ODo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogdHJ5aW5nIHRvIGhhcmRlbiB0aGUgWFBhdGggaW50ZXJwcmV0ZXIKCkZyaSBPY3QgIDUgMjA6Mzc6NTEgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqIGRvYy94bWxjYXRhbG9nLjEgdXBkYXRlZCB1c2luZyBhIG5ldyBzdHlsZXNoZWV0IHRvIGFkZHJlc3MsIGluCglwYXJ0LCBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MzkyCgpGcmkgT2N0ICA1IDIzOjM1OjAwIEhLVCAyMDAxIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogSFRNTHBhcnNlcjogcmVwYWlyZWQgYW5vdGhlciBsb29wIHByb2JsZW0KCkZyaSBPY3QgIDUgMTE6MTY6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHVyaS5jOiBhcHBsaWVkIGZpeCBmcm9tIE1hdGhpYXMgSGFzc2VsbWFubiBhYm91dCBhIGJ1ZyBpbiBVUkkKCSAgcGFyc2luZy4KCSogeHBhdGguYzogZml4IGJ1ZyAjNjEyOTEgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSBub2RlIGlzCgkgIG1pc3NpbmcgZnJvbSB0aGUgbmFtZXNwYWNlIGF4aXMuCgkqIHRyZWUuYzogcmVmdXNlIHRvIGNyZWF0ZSBuYW1lc3BhY2VzIG5vZGVzIHdpdGggcHJlZml4ICJ4bWwiCgpUaHUgT2N0ICA0IDE2OjQ3OjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogb3VjaCBhIG5vbi1kZWZpbmVkIG5hbWVzcGFjZSBjb3VsZCBsZWFkIHRvIGEgY3Jhc2gsCgkgIGZpeGVkICM2MTIxNQoKVGh1IE9jdCAgNCAxNjoyNDoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VySW50ZXJuYWxzLmM6IGNsb3NlZCBidWcgIzYxMDU0CgpXZWQgT2N0ICAzIDE1OjE5OjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbTogY2xvc2luZyAjNjA3MDgKClR1ZSBPY3QgIDIgMTU6NTI6MDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmMgaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggcGFyc2VyLmM6CgkgIGFkZGluZyB4bWxTQVhQYXJzZUZpbGVXaXRoRGF0YSBmb2xsb3dpbmcgTWFyY28gU3RpcGVrIHN1Z2dlc3Rpb24KClR1ZSBPY3QgIDIgMTE6Mjc6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHZhbGlkLmM6IGNsb3NlIGJ1ZyAjNjE1NTAgd2hlbiB4bWw6IHdhc24ndCBjb25zaWRlcmVkIGEgbmFtZXNwYWNlCgpUdWUgT2N0ICAyIDExOjE4OjMyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBJZ29yIFpsYXRrb3ZpYyBwYXRjaGVzCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IGZpeGVkIHR5cG9zCgpNb24gT2N0ICAxIDA5OjM0OjUxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IEp1c3RpbiBGbGV0Y2hlciBwcm92aWRlZCBjbGVhdXAgY29kZSBpbiBjYXNlCgkgIEhBVkVfU1RBVCBpcyBub3QgZGVmaW5lZAoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IElnb3IgWmxhdGtvdmljIHN1Z2dlc3RlZCB0byBoYXZlCgkgIEhBVkVfU1RBVCBkZWZpbmVkIHRoZXJlCgpTYXQgU2VwIDI5IDAwOjE1OjAwIEhLVCAyMDAxIFdpbGxpYW0gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgoKCSogY2F0YWxvZy5jIC0gZml4ZWQgdHlwaW5nIGVycm9yIHJlcG9ydGVkIGJ5IE0uIEJhcnJvcwoKU3VuIFNlcCAyMyAyMTowMjozOSBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogeG1sbGludC5jIC0gZml4aW5nIHR5cG8KClNhdCBTZXAgMjIgMTA6MDA6MDAgSEtUIDIwMDEgV2lsbGlhbSBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+CgoJKiBIVE1McGFyc2VyLmM6IHNtYWxsIGVuaGFuY2VtZW50IHRvIHByZXZlbnQgbG9vcCBvbgoJICB1bnJlY29nbml6YWJsZSBkYXRhCgpGcmkgU2VwIDIxIDExOjQ1OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYzogYXBwbHlpbmcgcGF0Y2ggZnJvbSBidWcgIzYwNzU3IHRoaXMKCSAgc2hvdWxkIGNsb3NlIGl0CgpUaHUgU2VwIDIwIDE1OjU0OjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmMgeG1sY2F0YWxvZy5jOiByZW1vdmVkIGEgY291cGxlIG9mIHdhcm5pbmcKCSogeHBhdGguYzogdHJ5IHRvIHNvbHZlIHRoZSBsaW5raW5nIHByb2JsZW0gb24gcGxhdGZvcm1zCgkgIG5lZWRpbmcgdHJpbyB0byBjb21waWxlCgpXZWQgU2VwIDE5IDEwOjAxOjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogYmFja2luZyB1cCBub24tZG9jdW1lbnRlZCBjaGFuZ2VzCgkgIGNvbW1pdGVkIHdpdGhvdXQgcmV2aWV3IG9yIGFwcm92YWwgYnkgSmVucyBGaW5rZSA8amVuc0Bnbm9tZS5vcmc+CgkqIEhBQ0tJTkc6IG1hZGUgMTAwJSBjbGVhciB0aGF0IG5vIGNvbW1pdCBzaG91bGQgYmUgZG9uZSBkaXJlY3RseQoKTW9uIFNlcCAxNyAxODo1MjozNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY29uZmlndXJlLmluOiBKb2UgT3J0b24gcHJvdmlkZWQgYSBwYXRjaCBmaXhpbmcgYSBwcm9ibGVtCgkgIHdoZW4gaWNvbnYgaXMgc3BlY2lmaWVkIHRvIGJlIGluIGEgbm9uLXN0YW5kYXJkIGRpcmVjdG9yeQoJICBidXQgd2Fzbid0IGV4cG9ydGVkIGluIHhtbDItY29uZmlnIC0tY2ZsYWdzCgpGcmkgU2VwIDE0IDE5OjMyOjQzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWd1cmUuaW46IGxldCdzIHNoaXAgMi40LjUgYmVmb3JlIGdldHRpbmcgdG9vIG11Y2gKCSAgdHJvdWJsZXMgd2l0aCAyLjQuNCBlcnJvcnMuCgpGcmkgU2VwIDE0IDEyOjI2OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbmNvZGluZy5jIGVudGl0aWVzLmM6IGRvIG5vdCBvdXRwdXQgaGV4YWRlY2ltYWwgY2hhcnJlZnMKCSAgd2hlbiBzZXJpYWxpemluZyBIVE1MIHNpbmNlIHNvbWUgdmVyc2lvbiBvZiBOZXRzY2FwZSBjYW4ndAoJICBncm9rIGl0LCBnZW5lcmF0ZSBkZWNpbWFsIG9uZXMuCgkqIHJlc3VsdC9IVE1ML2RvYzMuaHRtOiBvdXRwdXQgY2hhbmdlZCBkdWUgdG8gcHJldmlvdXMgdGVzdAoJKiBwYXJzZXJJbnRlcm5hbHMuYzogcmVwYWlyIHhtbEtlZXBCbGFua3NEZWZhdWx0KCkgYnJva2VuIGluIDIuNC40CgpUaHUgU2VwIDEzIDEzOjM0OjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBsaWJ4bWwtMi4wLnBjLmluOiBkb2hoIGdlbmVyYXRlZCB0aGUgd3JvbmcgaW5jbHVkZSBwYXRoIDotKAoJKiBkb2MvTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IHJlLWRvaGggZm9yZ290IHRoZSBuZXcgbWFucGFnZSA6LSgKCldlZCBTZXAgMTIgMjI6MTQ6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCVJlbGVhc2VkIDIuNC40CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gbGlieG1sLnNwZWMuaW4gaW5jbHVkZS9saWJ4bWwvTWFrZWZpbGUuYW0KCSAgbGlieG1sLTIuMC5wYy5pbjogbW92ZWQgaW5jbHVkZXMgdG8gaW5jbHVkZWRpci9saWJ4bWwyL2xpYnhtbCwKCSAgdXBkYXRlZCB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHRzIHN5c3RlbXMgYWNjb3JkaW5nbHkKCldlZCBTZXAgMTIgMjA6NDk6MzIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjQuNAoJKiBkb2MveG1sLmh0bWwgZG9jL2h0bWwvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jcwoKV2VkIFNlcCAxMiAxNjo1ODoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogd2luMzIvZHNwL2xpYnhtbDIuZGVmLnNyYzogdHJpZWQgdG8gaW5jb3Jwb3JhdGUgY29tbWVudHMKCSAgZnJvbSBidWcgIzU5MjIwCgpUdWUgU2VwIDExIDExOjI1OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBwYXJzZXIuYyByZXN1bHQvbm9lbnQvd21sLnhtbDogZml4ZWQgYnVnICM1OTk4MSByZWxhdGVkCgkgIHRvIGhhbmRsaW5nIG9mICcmJyBpbiBhdHRyaWJ1dGVzIHdoZW4gZW50aXRpZXMgYXJlIHN1YnN0aXR1ZWQKCk1vbiBTZXAgMTAgMjI6MTQ6NDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGxpYnhtbC5oIGluY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgoJICBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaC5pbjoKCSAgVHJpZWQgdG8gY2xvc2UgYnVnICM2MDEzMQoKTW9uIFNlcCAxMCAyMDo0NjowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGVkIGEgYnVnIGluIHRoZSBIVE1MIHBhcnNlciBpbnRyb2R1Y2VkIFNlcCAgOQoKTW9uIFNlcCAxMCAyMDoxMzowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmM6IGZpeGluZyBidWcgIzU5OTQ2IG9uIHhtbG5zPSIiCgpNb24gU2VwIDEwIDE2OjM5OjQyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIFNBWC5jOiBmaXhpbmcgYnVnIDU5NzMyLCBzaW1wbGUKCSAgYnV0IGFsbG9jYXRlcyBhIG5ldyBlcnJvciBjb2RlLgoKU3VuIFNlcCAgOSAxMDozMzoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeG1sbGludC5jOiBKb2huIEZsZWNrIGZpeGVkIHR5cG9zIGluIHRoZSBvcHRpb25zIG91dHB1dAoJKiBwYXJzZXIuYyBTQVguYzogZml4IGlnbm9yYWJsZSB3aGl0ZSBzcGFjZSBTQVggc2VsZWN0aW9uCgpTYXQgU2VwICA4IDExOjQzOjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBlbnRpdGllcy5jOiBTdGV2ZSBVbmRlcndvb2QgZm91bmQgdGhlIHBvc3NpYmlsaXR5IG9mIGFuCgkgIGluaW5pdGUgbG9vcCBpbiBjYXNlIG9mIGVycm9yLgoKRnJpIFNlcCAgNyAxMTozNTowMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogTWFrZWZpbGUuYW06IE5lZWQgJChJQ09OVl9MSUJTKSBpbiBsaWJ4bWwyX2xhX0xJQkFERAoKV2VkIFNlcCAgNSAxNzo0Nzo0MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogcGFyc2VyLmM6IHdhcm4gaWYgdmVyc2lvbiBpcyBub3QgMS4wIGJ1dCBpdCdzIG5vdAoJICBzdHJpY3RseSBzcGVha2luZyBhbiBlcnJvciBhZnRlciBhbmFseXppbmcgdGhlIHNwZWMKCk1vbiBTZXAgIDMgMTA6MDc6MDMgTURUIDIwMDEgSm9obiBGbGVjayA8amZsZWNrQGlua3N0YWluLm5ldD4KCgkqZG9jL2NhdGFsb2cuaHRtbCAtIGFkZCBsaW5rIHRvIHRoZSBodG1sIHZlcnNpb24gb2YgdGhlCgltYW4gcGFnZSwgb3RoZXIgbGluZ3Vpc3RpYyBjbGVhbnVwcwoKTW9uIFNlcCAgMyAwOToxMDowOCBNRFQgMjAwMSBKb2huIEZsZWNrIDxqZmxlY2tAaW5rc3RhaW4ubmV0PgoKCSogZG9jL3htbGNhdGFsb2dfbWFuLnhtbCwgeG1sY2F0YWxvZ19tYW4uaHRtbCwgeG1sY2F0YWxvZy4xCglhZGRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgeG1sY2F0YWxvZy4gTm90ZTogeG1sY2F0YWxvZy4xLCB0aGUgbWFuCglmaWxlLCBoYXMgbm90IHlldCBiZWVuIGluY2x1ZGVkIGluIHRoZSBidWlsZC4KClNhdCBTZXAgIDEgMTg6MTc6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGNhdGFsb2cuYzogcmVtb3ZlZCBhIGR1cGxpY2F0ZSBhZmZlY3RhdGlvbiBKdXN0aW4gRmxldGNoZXIKCkZyaSBBdWcgMzEgMjI6MDI6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRyZWUuYzogQXJtaW4gU2FuZGVyIHBvaW50ZWQgYSBwb3NzaWJsZSB0ZXh0IGNvYWxlc2NpbmcgCgkgIHByb2JsZW0sIGNvbXBsZXRlZCBoaXMgcGF0Y2guCgpGcmkgQXVnIDMxIDE4OjMwOjI4IENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHRyaW9uYW4uYzogRml4ZWQgY29uc3QgYW5kIHZvbGF0aWxlIHJlLWRlZmluaXRpb24gcHJvYmxlbQoKRnJpIEF1ZyAzMSAxNjo1MToyOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLjQgcGFyc2VyLmM6IGRvYyB1cGRhdGVzIGZyb20gSGVpa28gUnVwcAoJKiBwYXJzZXJJbnRlcm5hbHMuYzogMiBzYW5pdHkgY2hlY2tzIGZyb20gSGVpa28gUnVwcAoKVHVlIEF1ZyAyOCAyMjozODo0NSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gQXJtaW4gU2FuZGVyIHRvIG1ha2Ugc29tZSBwb2ludGVycwoJICBjb25zdCBpbiB4bWxDb3B5Tm9kZSgpCgkqIGluY2x1ZGUvbGlieG1sL3RyZWUuaDogYWRkZWQgZml4IHRvIHRoZSBoZWFkZXIKCk1vbiBBdWcgMjcgMTY6MjQ6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGh1bSwgcmVzdHJpY3QgdGhlIGludGVnZXIgdXNhZ2UgZ2NjIGJ1ZyB3b3JrYXJvdW5kCgkgIHRvIG9ubHkgZ2NjIGNvbXBpbGVycyBzbyB0aGF0IG90aGVyIGFyY2hpdGVjdHVyZSBkb24ndCBnZXQKCSAgcGVuYWxpemVkIGJ5IHRoaXMgbGltaXRhdGlvbi4KCSogaW5jbHVkZS9saWJ4bWwveHBhdGguaDogc21hbGwgdHlwbyBmaXggZnJvbSBIZWlrbyBXLiBSdXBwCgpTdW4gQXVnIDI2IDIwOjQ1OjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB2YWxpZC5jOiBmaXhlZCBhIFdpbmRvd3MgY29tcGlsZXIgd2FybmluZyAoQ2hyaXMgUG9ibGV0ZSkKCSogeHBhdGguYzogZml4IGZvciBtb2Qgd2hlbiBkaXZpZGVuZCBpcyAwIChDaHJpcyBQb2JsZXRlKQoKU2F0IEF1ZyAyNSAxNTozMDoxNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oIGNhdGFsb2cuYyB4bWxjYXRhbG9nLmM6IGFkZGVkIGEgCgkgIC0tY29udmVydCBvcHRpb24gdG8geG1sY2F0YWxvZyB0byBjb252ZXJ0IFNHTUwgb25lcyB0bwoJICB0aGUgWE1MIHN5bnRheC4KCSogeG1sbGludC5jOiBzbWFsbCBjbGVhbnVwIGZvciAkU0dNTF9DQVRBTE9HX0ZJTEVTIHN1cHBvcnQuCgoJMi40LjMgZ290IHJlbGVhc2VkIGF0IHRoYXQgcG9pbnQKVGh1IEF1ZyAyMyAyMzoxNjozMiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIHhtbElPLmM6IHN0YXJ0ZWQgc29tZSBzZXJpb3VzIHRlc3RpbmcgYW5kIGZpeGVkCgkgIGEgZmV3IGJ1ZyBhbmQgb3B0bWl6YXRpb24gbmVlZHMuCgpUaHUgQXVnIDIzIDE3OjI2OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CgkgIHByZXBhcmluZyBmb3IgYSAyLjQuMyByZWxlYXNlIGV2ZW4gaWYgaXQgbWF5IG5vdCBiZSByZWFkeSB5ZXQKCSogY2F0YWxvZy5jIHBhcnNlci5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOiByZWRpcmVjdGVkCgkgIGFsbCBmaWxlIHBhcnNpbmcgbG9va3VwIHRvIGdvIHRocm91Z2ggdGhlIGVudGl0eSByZXNvbHZlciwgYWRkCgkgIHRvIGFkZCBhbiBBUEkgdG8gYnlwYXNzIGl0IChuZWVkZWQgdG8gbG9hZCBjYXRhbG9ncyB0aGVtc2VsdmVzKSwKCSAgc29tZSBjbGVhbnVwIG9uIHRoZSBjYXRhbG9nIGNvZGUgdG9vLgoJKiBuYW5vZnRwLmM6IHNtYWxsIGNsZWFudXAKCSogZG9jL2NhdGFsb2cuaHRtbDogc21hbGwgdXBkYXRlCgpUaHUgQXVnIDIzIDEyOjIyOjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGZpeGVkIGJ1Z2kgIzU5NDA2IGluIFNHTUwgY2F0YWxvZyBwYXJzaW5nIHJlcG9ydGVkIGJ5CgkgIEp1biBLdXJpeWFtYQoKVGh1IEF1ZyAyMyAwMjo1MToyOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2NhdGFsb2cuaHRtbDogZmluaXNoZWQgdGhlIGNhdGFsb2cgZG9jdW1lbnRhdGlvbgoKVGh1IEF1ZyAyMyAwMTozODo0MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZG9jL2NhdGFsb2cuaHRtbCBkb2MveG1sLmh0bWw6IGFkZGVkIGRvY3VtZW50YXRpb24gYWJvdXQKCSAgQ2F0YWxvZyBzdXBwb3J0LCBtaXNzZXMgYW4gQVBJIGRlc2NyaXB0aW9uIAoJKiBkb2MvaHRtbC8qOiByZWV4dHJhY3RlZCB0aGUgQVBJIHBhZ2VzCgpXZWQgQXVnIDIyIDE4OjI3OjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC9jYXRhbG9nLmggY2F0YWxvZy5jIHhtbElPLmMgSFRNTHBhcnNlci5jOgoJICBBZGRlZCB0aGUgcGFydCBhYm91dCBzZWN0aW9uIDcuMiBvbiBVUkkgcmVzb2x1dGlvbiwKCSAgZml4ZWQgYSBzaWRlIGVmZmVjdCBpbiB0aGUgSFRNTCBwYXJzZXIsIGxvb2sgY29tcGxldGUKCSAgYW5kIHJlYWR5IHRvIHJvY2sgZXhjZXB0IHRoZSBVUkkvU3lzdGVtSUQgcGFydCEKCldlZCBBdWcgMjIgMTY6Mjc6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIGluY2x1ZGUvbGlieG1sL2NhdGFsb2cuaCBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaAoJICBpbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oIGNhdGFsb2cuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYwoJICB4bWxJTy5jOiBhZGRlZCBzdXBwb3J0IGFuZCBBUElzIG5lZWRlZCBmb3IgdGhlIGNhdGFsb2cgUEkKCSogaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogY2xlYW51cAoKV2VkIEF1ZyAyMiAwMjowMzozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogY2F0YWxvZy5jIHBhcnNlci5jIHhtbElPLmMgeG1sY2F0YWxvZy5jIHhtbGxpbnQuYyAKCSAgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOiBzdGFydHMgdG8gbG9vayBva2F5LCByZWFsbHkKCSAgcGx1Z2dlZCB0aGUgbmV3IGZyYW1ld29yaywgY2xlYW5lZCBhIGxvdCBvZiBzdHVmZiwKCSAgYWRkZWQgc29tZSBBUElzLCBleGNlcHQgdGhlIFBJJ3Mgc3VwcG9ydCBtaXNzaW5nIHRoaXMKCSAgc2hvdWxkIGJlIG1vc3RseSBjb21wbGV0ZQoJKiByZXN1bHQvY2F0YWxvZ3MvKiB0ZXN0L2NhdGFsb2dzLyo6IGFkZGVkIG5ldyB0ZXN0LCBlbnJpY2hlZAoJICB0aGUgZXhpc3Rpbmcgb25lIHdpdGggVVJOIElEIHRlc3RzCgpUdWUgQXVnIDIxIDE0OjU2OjE4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjYXRhbG9nLmM6IGZpeGVkIG5leHRDYXRhbG9nCgkqIHJlc3VsdC9jYXRhbG9ncy9kb2Nib29rIHRlc3QvY2F0YWxvZ3MvKjogc3RhcnRlZCBhZGRpbmcKCSAgYSBzbWFsbCByZWdyZXNzaW9uIHRlc3QKClR1ZSBBdWcgMjEgMTI6NTI6MzggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIE1ha2VmaWxlLmFtIGNhdGFsb2cuYyB4bWxjYXRhbG9nLmMgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOgoJICBtb3JlIHdvcmsgb24gdGhlIFhNTCBjYXRhbG9nIHN1cHBvcnQuCgkqIHBhcnNlci5jIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oOiBzbWFsbCBjbGVhbnVwIHNlZW1zIHVzaW5nCgkgIGxpc3QgYXMgYSBwdWJsaWMgcGFyYW1ldGVyIG5hbWUgY2FuIGdpdmUgcG9ydGFiaWxpdHkgdHJvdWJsZXMKCSogdHJpb25hbi5jIHRyaW9uYW4uaCB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3RyaW9uYW4uaAoJICBpbmNsdWRlL2xpYnhtbC94cGF0aC5oIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiByZW1vdmVkCgkgIHRyaW9uYW4gZnJvbSB0aGUgbGlieG1sIEFQSSwgYWRkZWQgeG1sWFBhdGhJc0luZiBhbmQgeG1sWFBhdGhJc05hTgoJICB3cmFwcGVycwoKVHVlIEF1ZyAyMSAxMToxODo0NSBDRVNUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiBNYWtlZmlsZS5hbSB0cmlvLmMgdHJpb2RlZi5oIHRyaW9uYW4uYyB4cGF0aC5jCgkgIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtIGluY2x1ZGUvbGlieG1sL3RyaW9uYW4uaDoKCSAgUmUtd29ya2VkIE5vdC1BLU51bWJlciBhbmQgSW5maW5pdHkgc3VwcG9ydC4KCSogeG1sY2F0YWxvZy5jOiBhZGRlZCByZWFkbGluZSBpbmNsdWRlIGZpbGVzCgpNb24gQXVnIDIwIDAyOjA0OjEzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBNYWtlZmlsZS5hbSB4bWxjYXRhbG9nLmMgbGlieG1sLnNwZWMuaW46IHJlbmFtaW5nIAoJICB0ZXN0Q2F0YWxvZyBhcyB4bWxjYXRhbG9nLCBtYWtpbmcgaXQgYW4gaW5zdGFsbGVkIGFwcAoJICBhZGRpbmcgYSBzaGVsbCwgYW5kIHByZXBhcmluZyBpdCB0byBiZSBhIC9ldGMveG1sL2NhdGFsb2cKCSAgbWFuYWdlbWVudCB0b29sLCB0aG91Z2ggbm90IHJlYWR5IHlldAoJKiBjYXRhbG9nLmMgaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oOiBhZGRpbmcgc3VwcG9ydCBmb3IKCSAgWE1MIENhdGFsb2dzIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvCgkgIG5vdCBmaW5pc2hlZCwgdGhlcmUgaXMgc29tZSBpbnRlcmVzdGluZyB0cmFkZW9mZnMgYW5kIGEKCSAgZmV3IG9wZW4gcXVlc3Rpb25zIGxlZnQuCgpTdW4gQXVnIDE5IDE0OjU5OjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGZpeGVkIGEgbGluZSBmb3JtYXR0aW5nIHByb2JsZW0KCkZyaSBBdWcgMTcgMTE6MzU6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiByZW1vdmVkIGEgY291cGxlIG9mIHVudXNlZCB2YXJpYWJsZSAoQWxiZXJ0IENoaW4pCgpGcmkgQXVnIDE3IDAxOjI1OjIxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBpbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmg6CgkgIHRyeWluZyB0byBmaXggc29tZSB0cm91YmxlcyB3LnIudC4gZnVuY3Rpb24gcmV0dXJuaW5nCgkgIGNvbnN0IHh4eFB0ci4KClRodSBBdWcgMTYgMjE6MzM6MjAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHdpbjMyL2RzcC9saWJ4bWwyLmRlZi5zcmM6IGFub3RoZXIgc2V0IG9mIHN5bWJvbHMgY29uZGl0aW9uYWxseQoJICBkZWZpbmVkCgpUaHUgQXVnIDE2IDIxOjMxOjE0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4cG9pbnRlci5jOiByZW1vdmVkIHVudXNlZCB2YXIKClRodSBBdWcgMTYgMTg6MjY6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHRlc3RYUGF0aC5jOiBhbm90aGVyIHNtYWxsIGNsZWFudXAgY2xvc2luZyBidWcgIzU5MTEwCgpUaHUgQXVnIDE2IDE3OjU5OjE4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB3aW4zMi9kc3AvbGlieG1sMi5kZWYuc3JjOiBzbWFsbCBjbGVhbnVwIGNsb3NpbmcgYnVnCgkgICM1OTEwOAoKV2VkIEF1ZyAxNSAyMjo0NjowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogZXhhbXBsZS9nam9icmVhZC5jOiBhZGQgeG1sQ2xlYW51cFBhcnNlcigpIGJlZm9yZSBsZWF2aW5nCgpXZWQgQXVnIDE1IDE0OjU3OjA4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CgkgIHJlbGVhc2VkIDIuNC4yCgpXZWQgQXVnIDE1IDEzOjU2OjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBpbmNsdWRlL2xpYnhtbC92YWxpZC5oIGRlYnVnWE1MLmMgdmFsaWQuYzogZGVwcmVjYXRlCgkgIHRoZSBub24tYm91bmRjaGVja2luZyBTcHJpbnRmIGZ1bmN0aW9ucywgYWRkIFNucHJpbnRmCgkgIHRoaXMgc2hvdWxkIGNsb3NlIGJ1ZyAjNTc5ODQKCldlZCBBdWcgMTUgMTA6NDY6MDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhtbElPLmM6IHhtbE91dHB1dEJ1ZmZlckNyZWF0ZUZpbGVuYW1lKCkgZGlkbid0IHVuZXNjYXBlZAoJICBVUklzIGJlZm9yZSBkb2luZyB0aGUgbG9va3VwcyAocG9pbnRlZCBieSBNYXJrIFZha29jKQoKVHVlIEF1ZyAxNCAxODozNzoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogc2VyaW91cyBjaGFuZ2VzIG9uIFJlc3VsdCBWYWx1ZSBUcmVlcyBhbmQgTm9kZVNldHMKCSAgdy5yLnQuIGRlYWxsb2NhdGlvbiBhbmQgY29sbGVjdCBvcGVyYXRpb25zLiBQcm9iYWJseSBub3QKCSAgMTAwJSBjbGVhbiAobWVyZ2Ugb2YgYWxsb2NhdGVkIHRyZWVzIHNtZWxscyBsaWtlIGEgcHJvYmxlbSkuCgkgIFNlZW1zIHN1ZmZpY2llbnQgdG8gY2xvc2UgIzU4OTQzCgpUdWUgQXVnIDE0IDE2OjEyOjAwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiB4bWxsaW50LmM6IGFkZGluZyBhIC0tZm9ybWF0IG9wdGlvbgoKVHVlIEF1ZyAxNCAxNDoxNjoyNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogeHBhdGguYzogY291bnQoKSB3YXMgYnJva2VuIG9uIFJlc3VsdCBWYWx1ZSBUcmVlCgkqIHhtbElPLmM6IGZpeGVkIGZpbGU6Ly8vIGFjY2Vzc2VzIG9uIF9XSU4zMgoKTW9uIEF1ZyAxMyAxMzoyMjo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogbGlieG1sLm00OiBzL0xJQlhNTF9WRVJTSU9OX05VTUJFUi9MSUJYTUxfVkVSU0lPTi8gc2VlbXMgdGhlCgkgIG1hY3JvIHdhcyByZW5hbWVkLCB0aGlzIHNob3VsZCBjbG9zZSBidWcgIzU4NjgzCgpNb24gQXVnIDEzIDEyOjMzOjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBTQVguYzogc21hbGwgZml4IGZpeGluZyBidWcgIzU4NTM5IHJlcG9ydGVkIGJ5IGNvb2xvLCBpbgoJICBlbnRpdHkgc3Vic3RpdHV0aW9uIG1vZGUgdGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBlbnRpdHkgbWlnaHQKCSAgYmUgYWRkZWQgZHVlIHRvIHRleHQgY29hbGVzY2luZy4KCSogbmFub2Z0cC5jIHBhcnNlci5jOiBzbWFsbCBjbGVhbnVwCgpXZWQgQXVnICA4IDIyOjU3OjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPGRhbmllbEB2ZWlsbGFyZC5jb20+CgoJKiBIQUNLSU5HOiBhZGRlZCBKb2huIEZsZWNrIHJpZ2h0IHRvIGNvbW1pdCBpbiB0aGUgZG9jIHN1YmRpcgoKVHVlIEF1ZyAgNyAwMzowNTo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxkYW5pZWxAdmVpbGxhcmQuY29tPgoKCSogU0FYLmMgdGVzdFhQYXRoLmMgdmFsaWQuYyB4bWxsaW50LmMgaW5jbHVkZS9saWJ4bWwvdmFsaWQuaDoKCSAgYWxsb3cgdG8gaW5oZXJpdCBhdHRyaWJ1dGVzIGZyb20gdGhlIERURCBkaXJlY3RseSBpbiB0aGUKCSAgdHJlZSwgdGhpcyBpcyBuZWVkZWQgZm9yIFhQYXRoIGFuZCBjYW4gYmUgYSB1c2VmdWwgZmVhdHVyZS4KCSAgSW5oZXJpdGVkIG5hbWVzcGFjZXMgYXJlIGFsd2F5cyBwcm92aWRlZCBhdCB0aGUgdHJlZSBsZXZlbCBub3cKCSogdGVzdC9kZWZhdHRyKiByZXN1bHQvZGVmYXR0ciogcmVzdWx0L25vZW50L2RlZmF0dHIqOiBhZGRlZCBhIGNvdXBsZQoJICBvZiB0ZXN0cyBmb3IgdGhpcyBmZWF0dXJlIChYU0xUIGJlaW5nIHRoZSBwcmltZSB1c2VyKS4KCkZyaSBBdWcgIDMgMTQ6MDI6MjAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIERPQ0JwYXJzZXIuYyBNYWtlZmlsZS5hbSBuYW5vaHR0cC5jIHBhcnNlci5jIHRlc3RIVE1MLmMKCSAgdGVzdFNBWC5jIHhtbElPLmMgeG1sbGludC5jIGluY2x1ZGUvd2luMzJjb25maWcuaAoJICBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmgKCSAgaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmguaW4gd2luMzIvUkVBRE1FLk1TRGV2CgkgIHdpbjMyL2RzcC8qOiBhcHBsaWVkIFdpbjMyIEZhY2VsaWZ0IE5vLjIgcGF0Y2hlcyBmcm9tIAoJICBJZ29yIFpsYXRrb3ZpYyBmb3IgV2luZG93cy9NU0MKCldlZCBBdWcgIDEgMjM6MjE6MDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIFNBWC5jOiB1bnBhcnNlZEVudGl0eURlY2woKSB0aGUgVVJJIGNvbXB1dGF0aW9uIG9mIHRoZQoJICBlbnRpdHkgd2Fzbid0IGRvbmUgYnJlYWtpbmcgWFNMVCB1bnBhcnNlZC1lbnRpdHktdXJpKCkKCldlZCBBdWcgIDEgMTc6NDQ6NTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8ZGFuaWVsQHZlaWxsYXJkLmNvbT4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgYnVnIHdoZW4gd2Fsa2luZyB0aGUgZGVzY2VuZGFudHMgYW5kCgkgIHRoZSBjdXJyZW50IG5vZGUgaGFzIG5vIGNoaWxkcmVuCgkqIGRlYnVnWE1MLmM6IHNob3cgdXAgd2hlbiBhIHRleHQgbm9kZSBpcyBzdXBwb3NlZCB0byBub3QgYmUgZXNjYXBlZAoKV2VkIEF1ZyAgMSAwMTozMzozNSBDRVNUIDIwMDEgVGhvbWFzIEJyb3llciA8dGJyb3llckBsdGd0Lm5ldD4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgYnVnIGluIHhtbFhQYXRoTm9kZVRyYWlsaW5nU29ydGVkIChmb3Igbm93IGl0CgkgIHdvcmtlZCBsaWtlIHRoZSBzZXQ6bGVhZGluZygpIGZ1bmN0aW9uKQoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOiBhZGRlZCB4bWxYUGF0aE5vZGVTZXRDb250YWlucwoKVHVlIEp1bCAzMSAxODoyNDozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIG5hbm9odHRwLmM6IHByb3RlY3RlZCBhbiB1c2Ugb2YgRUFHQUlOLCBCcmlhbiBTdGFmZm9yZAoKVHVlIEp1bCAzMSAxNzo0ODo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbElPLmg6IGFwcGx5IGNoYW5nZSB0byBjbG9zZSAjNTgxNDEgCgkqIHdpbjMyL2xpYnhtbDIvKjogdXBkYXRlIG9mIHRoZSBNU0MgcHJvamVjdHMgZnJvbSBJZ29yICBabGF0a292aWMKClR1ZSBKdWwgMzEgMTc6MDk6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogd2hlbiB0aGUgaW50ZXJuYWwgc3Vic2V0IHVzZXMgYSBQRSwgdGhlbiB0aGUKCSAgaW5jbHVkZWQgZW50aXR5IGNhbiB1c2UgY29uZGl0aW9uYWwgc2VjdGlvbnMuCgpNb24gSnVsIDMwIDEyOjU4OjM5IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIGluY2x1ZGUvbGlieG1sL3hwYXRoLmg6IGZpeGVkIGEgc2VyaW91cyBtZW1vcnkgcHJvYmxlbgoJICB3aGVuIHdhbGtpbmcgdGhlIG5hbWVzcGFjZSBheGlzIHNob3dpbmcgdXAgaW4KCSAgbGlieHN0L3Rlc3RzL2dlbmVyYWwvYnVnLTEyCgkqIHhtbG1lbW9yeS5jOiBhZGRlZCB0aGUgcG9zc2liaWxpdHkgdG8gdHJhY2UgYSBnaXZlbiBibG9jawoJICBkZWZpbmVkIGJ5IGl0cyBhZGRyZXNzCgpTdW4gSnVsIDI5IDA3OjE4OjUzIEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgZW5jb2Rpbmcgc3BlY2lmaWVkIGJlZm9yZQoJICBzdGFydGluZyB4bWxQYXJzZURvY3VtZW50KCkKClNhdCBKdWwgMjggMTM6MzM6MTAgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOiByZWluc2VydGVkLCBuZWVkZWQgZm9yCgkgIFdpbmRvd3MgdXNlcnMgb2YgQ1ZTCgoyMDAxLTA3LTI3ICBEYXJpbiBBZGxlciAgPGRhcmluQGJlbnRzcG9vbi5jb20+CgoJKiBlbmNvZGluZy5jOiAoeG1sSWNvbnZXcmFwcGVyKTogQWRkIGNhc3QgdG8gZml4IHdhcm5pbmcuCgkqIHRlc3RDYXRhbG9nLmM6IEFkZCBpbmNsdWRlIG9mIDxsaWJ4bWwvcGFyc2VyLmg+LgoKMjAwMS0wNy0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBiZW50c3Bvb24uY29tPgoKCSogaW5jbHVkZS9saWJ4bWwvLmN2c2lnbm9yZToKCSogaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6CglSZW1vdmUgdGhpcyBmaWxlIGZyb20gQ1ZTIGJlY2F1c2UgaXQncyBnZW5lcmF0ZWQuCgpGcmkgSnVsIDI3IDEwOjAzOjU2IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBpbmNsdWRlL2xpYnhtbC9wYXJzZXIuaDogYXBwbGllZCBjb25zdCBwYXRjaGVzIGZyb20KCSAgVG9tIE1vb2cgIzU4MDAyCgpUaHUgSnVsIDI2IDE4OjU1OjUyIENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogeHBhdGguYyBpbmNsdWRlL2xpYnhtbC94cGF0aHssSW50ZXJuYWxzfS5oOiBhZGRlZCBhIGZ1bmN0aW9uCgkgIGxvb2t1cCBmcmFtZXdvcmsKCkZyaSBKdWwgMjcgMDE6NTA6MjAgRURUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sQ29weU5vZGUoKSBmb3IgZG9jdW1lbnRzCgpUaHUgSnVsIDI2IDEyOjQwOjM1IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgYnVncyAjNTgwNzMgcmVwb3J0ZWQgYnkgR3JlZyBTaHRpbG1hbgoKVGh1IEp1bCAyNiAxMTozODozNyBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVzIGJ1ZyAjNTc2NTIgcmVwb3J0ZWQgYnkgTW9ydXMgV2FsdGVyCgpUaHUgSnVsIDI2IDEwOjI0OjM0IEVEVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBuYW5vaHR0cC5jOiBKb2huIEtyb2xsIHByb3ZpZGVkIGEgc21hbGwgZml4IHRvIHhtbE5hbm9IVFRQU2F2ZQoKVGh1IEp1bCAyNiAwNzoxNjowNCBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHRoZSB4bWxMaW5lTnVtYmVyc0RlZmF1bHQoKQoJICBlcnJvcnMsIGxlc3NvbiBkb24ndCBhZGQgbmV3IGZ1bmN0aW9ucyBhdCAxYW0gYmVmb3JlIGEgcmVsZWFzZQoJKiB4cGF0aC5jOiBpbnRlZ3JhdGVkIGZpeCBmcm9tIEJqb3JuIHRvIGF2b2lkIGRpdmlkZSBieSB6ZXJvCgkgIGZyb20gWFBhdGggaW5pdGlhbGl6YXRpb24gd2hlbiBwb3NzaWJsZS4KClR1ZSBKdWwgMjQgMTU6Mzk6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiByZXN1bHQvc2NyaXB0cy9iYXNlKjogcmVtb3ZpbmcgaGlzdG9yeS9yZWFkbGluZSBjaGFuZ2VkCgkgIHRoaXMgc2xpZ2h0bHkKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VyLmggU0FYLmMgcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMKCSAgeG1sbGludC5jOiBtYWtlIGVsZW1lbnQgY29udGVudCBsaW5lIG51bWJlciBnZW5lcmF0aW9uCgkgIG9wdGlvbm5hbCB0byBhdm9pZCBicmVha2luZyBvbGQgYXBwcyBhZGRlZCBpbnRlcmZhY2UgdG8gc3dpdGNoCgpUdWUgSnVsIDI0IDE1OjA2OjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBnZXQgcmlkIG9mIHRoZSByZWFkbGluZSBhbmQgbGliaGlzdG9yeQoJICBkZXBlbmRlbmNpZXMgYnkgZGVmYXVsdCwgcmVsZWFzZSAyLjQuMSB3aXRoIElBNjQgZml4CgkqIG5hbm9odHRwLmMgdHJlZS5jIHhtbElPLmMgaW5jbHVkZS9saWJ4bWwvbmFub2h0dHAuaAoJICBpbmNsdWRlL2xpYnhtbC90cmVlLmggaW5jbHVkZS9saWJ4bWwveG1sSU8uaDogaW5jb3Jwb3JhdGVkCgkgIEpvaG4gS3JvbGwgZml4ZXMgdG8gYWxsb3cgc2F2aW5nIHRvIEhUVFAgdmlhIFBVVCAob3IKCSAgUE9TVCBvZiBuZWVkZWQpLgoJKiBkb2MvaHRtbC8qLmh0bWw6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpTdW4gSnVsIDIyIDA1OjU2OjE2IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaGFzaC5jIGluY2x1ZGUvbGlieG1sL2hhc2guaDogYWRkZWQgeG1sSGFzaFNjYW5uZXJGdWxsLAoJICB4bWxIYXNoU2NhbkZ1bGwgYW5kIHhtbEhhc2hTY2FubkZ1bGwzIHRvIGdldCBwYXNzZWQgdGhlCgkgIHRocmVlIGtleXMgYXMgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgoKVGh1IEp1bCAxOSAxNToyOToyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogcmVtb3ZlZCBsaWJ4bWwgc29mdGxpbmsgZm9yIGdvb2QKCSogaW5jbHVkZS9saWJ4bWwvKi5oICouYyBkb2MvTWFrZWZpbGUuYW06IGNsZWFudXAgdG8gZ2V0CgkgIDEwMCUgY292ZXJhZ2UgYnkgZ3RrLWRvYwoKVHVlIEp1bCAxNyAxNzozNjo0NiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbWVtb3J5LmMgaW5jbHVkZS9saWJ4bWwveG1sbWVtb3J5Lmg6IGRlYnVnZ2luZyBvbiBJQTY0LAoJICBmaXhlZCBzZXJpb3VzIHRyb3VibGVzIGR1ZSB0byBzaXplX3QgdnMuIGludCBtaXNtYXRjaAoKVHVlIEp1bCAxNyAxNjowNDozNiBFRFQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgeG1sSU8uYzogY2xlYW5lZCB1cCBzb21lIHdhcm5pbmcgb24gdGhlIEFscGhhCgpNb24gSnVsIDE2IDA2OjMyOjQ0IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGh7LEludGVybmFsc30uaCB4cGF0aC5jOiBhZGRlZCBhIG1vcmUKCSAgY29udmVuaWVudCBleHRlbnNpb24gQVBJIGZvciB2YWx1ZSBhbmQgY29udGV4dCBtYW5hZ2luZwoJICBOb3cgaGFuZGxlcyBleHRlcm5hbCBvYmplY3RzIHRocm91Z2ggeG1sWFBhdGhQb3BFeHRlcm5hbCwKCSAgeG1sWFBhdGhXcmFwRXh0ZXJuYWwgYW5kIHhtbFhQYXRoUmV0dXJuRXh0ZXJuYWwuCgkgIEFkZGVkIGZ1bmN0aW9ucyBmb3Igc2V0cyBvcGVyYXRpb25zIChpbnRlcnNlY3Rpb24sIGV0Yy4pCgpNb24gSnVsIDE2IDIwOjA1OjI3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmggaW5jbHVkZS9saWJ4bWwvSFRNTHBhcnNlci5oCgkgIHhtbElPLmMgdHJlZS5jIHBhcnNlckludGVybmFscy5jIGVudGl0aWVzLmMgZW5jb2RpbmcuYwoJICBIVE1McGFyc2VyLmM6IGNsZWFudXAgb2YgZ2xvYmFsIHZhcmlhYmxlcywgbWFya2luZyBzb21lCgkgIGNvbnN0IG9yIHByaXZhdGUuCgpNb24gSnVsIDE2IDAwOjE3OjE1IENFU1QgMjAwMSBUaG9tYXMgQnJveWVyIDx0YnJveWVyQGx0Z3QubmV0PgoKCSogaW5jbHVkZS9saWJ4bWwveHBhdGguaDogZXhwb3J0ZWQgeG1sWFBhdGh7TkFOLFBJTkYsTklORn0KCSAgZml4ZWQgeG1sWFBhdGhOb2RlU2V0SXRlbSB3aGVuIHBhc3NpbmcgaW5kZXg9MAoKU3VuIEp1bCAxNSAxNzo1ODo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oLmluOiBhZGRlZCB4bWxDaGVja1ZlcnNpb24oKQoKU2F0IEp1bCAxNCAxOTozMToyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuYzogZml4ZWQgY29tcGlsYXRpb24gdW5kZXIgQ3lnd2luICM1NzUwMwoJKiBUT0RPOiB1cGRhdGUKCjIwMDEtMDctMTMgIFBldGVyIFdpbGxpYW1zICA8cGV0ZXJ3QHhpbWlhbi5jb20+CgoJKiBjb25maWcuaC5pbjogYWRkICN1bmRlZiBIQVZFX0RMRkNOX0gKCgkqIGV4YW1wbGUvTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQ29tcGlsZSBmaXggd2hlbiBzcmNkaXIgIT0KCWJ1aWxkZGlyLgoKRnJpIEp1bCAxMyAxMTowOTo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kZWYuc3JjOiBhZGRlZCBhIGNvdXBsZSBvZiBleHBvcnRlZCBlbnRyaWVzCgkgIHJhaXNlZCBieSAjNTczNDggYW5kICM1NzM4MQoKVGh1IEp1bCAxMiAyMToyMDoxNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYyBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIHBhcnNlci5jCgkgIHRyZWUuYyB4cG9pbnRlci5jOiBzdG9yZSB0aGUgbGluZSBudW1iZGVyIGluIGVsZW1lbnQtPmNvbnRlbnQsCgkgIG1heSBicmVhayBzb21lIHNvZnR3YXJlLCBuZWVkIGEgY29uZmlndXJhdGlvbiBtZWNoYW5pc20KCjIwMDEtMDctMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYmVudHNwb29uLmNvbT4KCgkqIC5jdnNpZ25vcmU6CgkqIGV4YW1wbGUvLmN2c2lnbm9yZToKCSogaW5jbHVkZS8uY3ZzaWdub3JlOgoJKiBpbmNsdWRlL2xpYnhtbC8uY3ZzaWdub3JlOgoJVmFyaW91cyB0aGluZ3MgdGhhdCBhcmUgZ2VuZXJhdGVkIGFuZCBzaG91bGQgYmUgaWdub3JlZC4KClR1ZSBKdWwgMTAgMTc6NDc6MDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlbGVhc2Ugb2YgMi40LjAKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyo6ICB1cGRhdGVkIHRoZSBkb2NzCgpNb24gSnVsICA5IDIyOjA2OjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogZml4ZWQgIkludGVybmFsOiBNSVhFRCBzdHJ1Y3QgYmFkIiB3aGVuICNDREFUQSBlbGVtZW50cwoJICB2YWxpZGF0aW9uIG9jY3VyZWQgb24gY29udGVudCB3aXRoIGVsZW1lbnQgY2hpbGQKCk1vbiBKdWwgIDkgMTc6NTk6MDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIFhNTCBCYXNlIGNvbXB1dGF0aW9uIHdoaWNoIHdhcyBicm9rZW4KCSogZGVidWdYTUwuYzogYWRkZWQgYSBiYXNlIGZ1bmN0aW9uIHRvIHRoZSBzaGVsbAoJKiBNYWtlZmlsZS5hbSByZXN1bHQvc2NyaXB0cy8qIHRlc3Qvc2NyaXB0cy8qOiBhZGRlZCBzY3JpcHRzCgkgIGJhc2VkIHJlZ3Jlc3Npb24gdGVzdHMsIGFuZCBhZGRpbmcgMiBYTUwgQmFzZSB0ZXN0cwoKTW9uIEp1bCAgOSAxMjozMTowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogc2V0IHByb3BlcnRpZXMgZG9jIGFuZCBjYWxsIHhtbFNldExpc3REb2MgZm9yIHByb3BlcnRpZXMKCSAgY29udGVudCB3aGVuIGdyYWZ0aW5nIHRoZW0gaW4gYSBkaWZmZXJlbnQgdHJlZS4KCSogYWNsb2NhbC5tNDogcmVtb3ZlIGZyb20gQ1ZTCgpTdW4gSnVsICA4IDIzOjA5OjA3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGFkZGVkIHNvbWUgbWlzc2luZyBlbnRyeSBwb2ludAoJICBmb3IgWFBhdGggKE1hcmsgVmFrb2MpCgpTdW4gSnVsICA4IDIwOjM0OjM1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogZml4ZWQgYW4gb2xkIGJ1ZyByYWlzZWQgYnkgQmVybmhhcmQgWndpc2NoLCB0aGUgSS9PCgkgIGxheWVyIHNob3VsZCBVUkktVW5lc2NhcGUgYmVmb3JlIHRyeWluZyB0byBvcGVuIHJlc291cmNlcy4KClN1biBKdWwgIDggMTY6MjY6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXggdGhlIG5hbWUoKSBidWcgZm9yIGVsZW1lbnRzIGluIHRoZSBkZWZhdWx0IAoJICBuYW1lc3BhY2UgcmVwb3J0ZWQgYnkgQ2hhcmxpZSBCb3plbWFuCgpTdW4gSnVsICA4IDE1OjExOjA1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogU0FYLmMgcGFyc2VyLmMgdGVzdFhQYXRoLmMgeHBhdGguYzogdHJ5aW5nIHRvIGZpeCAjNTY5NDgsIHRoaXMKCSAgbGVkIHRvIGFuIFhQYXRoIGZpeCwgaW1wcm92ZW1lbnRzIG9mIFNBWCBpbml0aWFsaXphdGlvbiwgYW5kCgkgIGFuIGFkZGVkIG9wdGlvbiAtLW5vY2RhdGEgdG8gdGVzdFhQYXRoCgpTYXQgSnVsICA3IDIxOjA5OjU1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2xpYnhtbC1kb2MuZWw6IEZlbGl4IE5hdHRlciBwcm92aWRlZCBhbmV3IHZlcnNpb24gd29ya2luZwoJICB3aXRoIFhFbWFjcyB0b28KClNhdCBKdWwgIDcgMDI6MTY6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL2xpYnhtbC94cGF0aC5oOiBzbWFsbCBjbGVhbnVwCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlCgpGcmkgSnVsICA2IDAxOjQwOjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oOgoJICByZWxlYXNlZCAyLjMuMTQKCkZyaSBKdWwgIDYgMDA6NDc6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvaHRtbC8qOiByZWJ1aWx0IHRoZSBkb2NzIGZvciB0aGUgcmVsZWFzZQoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIDIuMy4xNCByZWxlYXNlLgoKVGh1IEp1bCAgNSAyMjowMTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGEgYnVnIHJlcG9ydGVkIGJ5IFN0ZXBoYW4gS3Vsb3cgZW1wdHkgbm9kZXNldHMKCSAgd2VyZSBub3QgZXF1YWwgdG8gZW1wdHkgc3RyaW5ncwoKVGh1IEp1bCAgNSAwMDo1MjoyNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jOiBmaXhlZCBhIFVSSS1SZWZlcmVuY2UgY29tcHV0YXRpb24gcHJvYmxlbSB3aGVuIHZhbGlkYXRpbmcKCSogeG1sSU8uYzogc21hbGwgY2xlYW51cAoKVGh1IEp1bCAgNSAwMDowNDo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBpbXByb3ZlZCB0aGUgZGVzY3JpcHRpb24gb2YgYSBjb3VwbGUgb2YgaW50ZXJmYWNlcwoJICB1cG9uIExhcnJ5IFN0YW1wZXIgc3VnZ2VzdGlvbgoKV2VkIEp1bCAgNCAyMTo0MjoyNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIGVudGl0aWVzLmMgcGFyc2VyLmM6IGNoYW5nZWQgY29tcGxldGVseSB0aGUgd2F5IGVudGl0aWVzCgkgIGFyZSBoYW5kbGVkIHdoZW4gcnVubmluZyB0aGUgcGFyc2VyIGluIGVudGl0eSBzdWJzdGl0dXRpb24gbW9kZS4KCSAgVGhpcyBmaXhlcyBhIGJ1ZyByZXBvcnRlZCBieSBTdGVwaGFuIEt1bG93IGFuZCBuZWFybHkgZGl2aWRlcwoJICBieSAzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIGJ5IGxpYnhzbHQgdG8gbG9hZCBhbmQgcHJvY2VzcwoJICBEb2NCb29rIFRERy4KCldlZCBKdWwgIDQgMTg6MDI6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmM6IGZpeGluZyBhIHRvbyBlYXJseSByb290IGNsb3NpbmcgcHJvYmxlbSByYWlzZWQKCSAgYnl0IFByYXNoYW50aCBOYWlkdQoKV2VkIEp1bCAgNCAwMTo0MjowMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbWlzc2luZyBjb3B5IGluIHhtbFhQYXRoVmFyaWFibGVMb29rdXBOUygpIAoJICByYWlzZWQgYnkgTWFyayBWYWtvYy4KClR1ZSBKdWwgIDMgMTg6MzU6NDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBleGFtcGxlL01ha2VmaWxlLmFtOiBmaXhlZCB0aGUgaW5jbHVkZSBwYXRoIHRvIGFkZCBzcmNkaXIvaW5jbHVkZQoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IGZpeCBmcm9tIEFsYmVydCBDaGluIGZvciBpY29udiBkZXRlY3Rpb24KCSAgYW5kIHNvbWUgY2xlYW51cAoKVHVlIEp1bCAgMyAxMDoxMjowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgaW5jbHVkZS9saWJ4bWwveHBhdGguaCBpbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oOgoJICBsb3Qgb2Ygb3B0aW1pemF0aW9uIHdvcmssIHJlc3VsdHMgaW4gc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzCgkgIHdoZW4gaGFuZGxpbmcgcmVhbGx5IGNvbXBsZXggWFBhdGggcXVlcmllcy4gQWRkIGEgc21hbGwgb3B0aW1pemVyCgkgIGZvciB1bmlvbnMsIGltcHJvdmUgW25dIGFuZCBbbGFzdCgpXSwgYXZvaWQgc29tZSBjb3N0bHkgb3BzLgoKRnJpIEp1biAyOSAyMzoyNjo1NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL3BhcnNlci5oIHBhcnNlci5jOiB4bWxTdHJzdHIgYXJncyBhcmUgYm90aCBjb25zdAoJKiB4cGF0aC5jOiBzbWFsbCBjbGVhbnVwCgkqIHhtbEdldE5zTGlzdDogcmVmb3JtYXRlZCwgZml4ZWQgcHJvYmxlbXMgaWYgdXNlZCBvbiBFbnRpdGllcwoKVGh1IEp1biAyOCAxODoxOTo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgMS44LjE0IGFuZCAyLjMuMTMgcmVsZWFzZXMKClRodSBKdW4gMjggMTg6MTY6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gaW5jbHVkZS9saWJ4bWwveG1sd2luMzJ2ZXJzaW9uLmg6IHJlbGVhc2VkIDIuMy4xMwoJKiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiB3b3JrYXJvdW5kIGF1dG9tYWtlIGdlbmVyYXRpbmcKCSAgZXJyb25lb3VzIGRlcHMKClRodSBKdW4gMjggMTU6MDg6MjIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IGJ1ZyAjNTY4MDEgWW9uIERlcmVrIHByb3ZpZGVkIGEgcGF0Y2gKCSAgdG8gdGhlIHdpbmRvd3MgY29uZmlnIGZpbGUuCgpUaHUgSnVuIDI4IDE0OjUxOjQ0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBvaW50ZXIuYyBpbmNsdWRlL3dpbjMyY29uZmlnLmggd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmMKCSAgbGlieG1sLmggOiBZb24gRGVyZWsgcHJvdmlkZWQgYSBzZXQgb2YgY2hhbmdlcyB0byBjb21waWxlIGZyb20KCSAgQ1ZTIG9uIFdpbmRvd3MvTVNDCgpUaHUgSnVuIDI4IDE0OjExOjI4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIFVURjggQk9NIHN1cHBvcnQgaW4gcHVzaCBtb2RlCgkqIHRlc3QvdXRmOGJvbS54bWwgcmVzdWx0L3V0Zjhib20ueG1sIHJlc3VsdC9ub2VudC91dGY4Ym9tLnhtbDoKCSAgYWRkZWQgYSBzcGVjaWZpYyB0ZXN0Y2FzZQoKV2VkIEp1biAyNyAxODozMzoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCAtLXB1c2ggcmVncmVzc2lvbiB0ZXN0cwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogdGhlIFhNTCBwYXJzZXIgc2VnZmF1bHRlZCBpbiAtLXB1c2ggbW9kZQoKV2VkIEp1biAyNyAxMzowOTo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogbW92ZWQgdGhlIHN5bWxpbmtzIGRldGVjdGlvbiB3aXRoaW4gYSBDVlMKCSAgY2hlY2ssIHRoaXMgaXMgbm90IHBvcnRhYmxlIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4KCSogeHBhdGguYzogc21hbGwgY2xlYW51cC9zcGVlZHVwCgpUdWUgSnVuIDI2IDE4OjA1OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluIGRvYy94bWwuaHRtbCBpbmNsdWRlL2xpYnhtbC94bWx3aW4zMnZlcnNpb24uaDoKCSAgcmVsZWFzZSBvZiAyLjMuMTIKCSogcGFyc2VyLmM6IG1ha2UgYW4gZXJyb3IgbWVzc2FnZSBpZiB1bmtub3cgZW50aXRpZXMgaW4gYWxsIGNhc2VzCgpUdWUgSnVuIDI2IDA5OjQ2OjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdXJpLmM6IGZpeGVkIDIgdXJpIG5vcm1hbGl6YXRpb24gYnVncyBvbiAnLy8nIHJlZHVjdGlvbgoKTW9uIEp1biAyNSAxODowNjoyMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvbGlieG1sL01ha2VmaWxlLmFtOiBMYXN6bG8gUGV0ZXIgcG9pbnRlZCBvdXQgdGhhdAoJICBpbmNsdWRlcyB3ZXJlIGluc3RhbGxlZCBpbiB0aGUgd3JvbmcgZGlyCgpNb24gSnVuIDI1IDE3OjA3OjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2h0bWwueG1sOiB3YXJuIGFnYWluc3Qgc2VuZGluZyBjb2RlIHRvIGV4aGliaXQgYnVncy4KClN1biBKdW4gMjQgMjM6MzE6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBwYXRjaCB0byB4bWxYUGF0aEZvcm1hdE51bWJlciBmb3IgdGhlIG9wdGltaXplciBvbgoJICBUcnU2NCBmcm9tIFRob21hcyBMZWl0bmVyCgpTdW4gSnVuIDI0IDE0OjA1OjU0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogQVVUSE9SUzogYWRkZWQgV2lsbGlhbSBhbmQgQmpvcm4KCSogaW5jbHVkZS9saWJ4bWwvKi5oICouYyBSRUFETUUgZG9jLyouaHRtbCBldGMuOiBjaGFuZ2VkIG9sZCBlbWFpbCB0bwoJICBkYW5pZWxAdmVpbGxhcmQuY29tIGhvcGVmdWxseSBJIHdvbid0IGhhdmUgdG8gZG8gdGhpcyBhZ2FpbgoJKiBkb2MvTWFrZWZpbGUuYW0gZG9jL2h0bWwvKi5odG1sOiBjbGVhbnVwIG1ha2VmaWxlLCBjaGVja2VkIHRoYXQKCSAgZG9jcyBjYW4gYmUgcmVidWlsdCBjbGVhbmx5IG5vdwoJKiBpbmNsdWRlL2xpYnhtbC94bWwqdmVyc2lvbi5oKjogcmVtb3ZlZCBpbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmgKCSAgZnJvbSBDVnMgaXQncyBnZW5lcmF0ZWQsIGFkZGVkIGluY2x1ZGUvbGlieG1sL3htbHdpbjMydmVyc2lvbi5oCgkgIGFsc28gZ2VuZXJhdGVkIGJ1dCB3aGljaCBzaG91bGQgY2hhbmdlIGZhciBsZXNzIGZyZXF1ZW50bHkuCgkqIGNhdGFsb2cuYyBuYW5vZnRwLmM6IG1hZGUgc3VyZSB0byBpbmNsdWRlIGxpYnhtbC5oIG5vdAoJICBsaWJ4bWwveG1sdmVyc2lvbi5oIGRpcmVjdGx5CgkqIGluY2x1ZGUvbGlieG1sLyouaDogaW5jbHVkZSB4bWx3aW4zMnZlcnNpb24uaCBpbnN0ZWFkIG9mIHhtbHZlcnNpb24uaAoJICB3aGVuIGNvbXBpbGluZyBvbiBXSU4zMiBhbmQgTVNDCgpTYXQgSnVuIDIzIDIzOjU0OjEyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS9NYWtlZmlsZS5hbSBpbmNsdWRlL2xpYnhtbC9NYWtlZmlsZS5hbSBjb25maWd1cmUuaW46CgkgIGZpeGVkIG1ha2UgZGlzdGNoZWNrIGFuZCByZWJ1aWxkaW5nIHRoZSBycG1zCgpTYXQgSnVuIDIzIDIwOjUwOjUzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBzaG91bGQgZmluaXNoIHRoZSBtaWdyYXRpb24gb2YgZXhwb3J0ZWQgaW5jbHVkZXMKCSAgaW50byBhIHJlYWwgaW5jbHVkZS9saWJ4bWwgaW4gQ1ZTLCBhdCBsZWFzdCBmb3IgQ1ZTIHVzZXJzLgoJKiByZW1vdmVkIHRoZSBleHBvcnRlZCBoZWFkZXJzLCBhZGRlZCBpbiBpbmNsdWRlL2xpYnhtbCAoYXMgd2VsbAoJICBhcyB4bWx2ZXJzaW9uLmguaW4pLgoKU2F0IEp1biAyMyAyMDozNzoxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgdGhlIHdheSB0byBkZXRlY3Qgc3ltbGluawoKU2F0IEp1biAyMyAyMDozMDoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogdXBkYXRlZCwgaW5jbHVkZS9saWJ4bWwgaXMgbm93IGEgcmVhbCBDVlMgZGlyCgpTYXQgSnVuIDIzIDE5OjM2OjMxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2xpYnhtbC1kb2MuZWw6IGEgbmV3IHZlcnNpb24gb2YgbGlieG1sLWRvYy5lbC4gVGhpcyBuZXcKCSAgdmVyc2lvbiB3b3JrcyB3aXRoIGJvdGggbGlieG1sMSBhbmQgbGlieG1sMiAoaXQgYXV0b2RldGVjdHMKCSAgdGhlIHByZWZpeCBvZiB0aGUgaHRtbC1maWxlcykgZnJvbSBGZWxpeCBOYXR0ZXIuCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCBkb2MgYWNjb3JkaW5nbHkKClNhdCBKdW4gMjMgMTg6MzA6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgYnVnIGdlbmVyYXRpbmcgYSB0ZW1wbGF0ZSBsb29wIGluIGxpYnhzbHQKCSAgd2hlbiB1c2luZyBkb2Nib29rLXhzbC0xLjQsICogc2hvdWxkIGZpbHRlciBvdXQgZG9jdW1lbnQgbm9kZXMKCSogSEFDS0lORzogYWRkZWQgV2lsbGlhbQoJKiBUT0RPOiB1cGRhdGVkCgpGcmkgSnVuIDIyIDE4OjAyOjM3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL0ZBUS5odG1sOiBhZGRlZCBhIHdhcm5pbmcgYWJvdXQgZ2NjLTMuMAoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIHJlZmVyZW5jZSB0byBnZG9tZTIgYW5kIHJlbW92ZWQgYSBjb25mdXNpbmcKCSAgc2VudGVuY2UKCkZyaSBKdW4gMjIgMTc6MDI6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWx2ZXJzaW9uLmg6IG9rYXkgdGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlLCBidXQgV2luZG93cwoJICB1c2VycyBuZWVkIGl0IGFuZCB0aGV5IGNhbid0IGdlbmVyYXRlIGl0LCBhbmQgSSB3YW50IENWUwoJICBXaW5kb3dzIHVzZXJzIC4uLgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDJfc28uZHNwOiBXaW5kb3dzIHByb2plY3QgZmlsZSBmb3IgCgkgIHRoZSBzaGFyZWQgbGliIHZlcnNpb24gb2YgbGlieG1sMgoJKiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZGVmLnNyYzogYnVnICM1NjUyNyBzZXQgb2YgZXhwb3J0ZWQKCSAgcmVzb3VyY2VzIG5lZWRlZCBmb3IgbGlieHNsdC94c2x0cHJvYyBieSBZb24gRGVyZWsKCkZyaSBKdW4gMjIgMTY6Mzk6MzYgQ0VTVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogdHJpby5jOiBNU1ZDIGZpeCAocHJvdmlkZWQgYnkgSWdvciBabGF0a292aWMpCgpGcmkgSnVuIDIyIDEyOjQyOjE2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogaW5jbHVkZS93aW4zMmNvbmZpZy5oOiBhbm90aGVyIHNtYWxsIGZpeCBmb3IgQVRUUklCVVRFX1VOVVNFRAoKRnJpIEp1biAyMiAxMjo0MjoxNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaDogWW9uIERlcmVrIHByb3ZpZGVkIGEgZmlyc3QgZml4CgkgIHRvIGJlIGFibGUgdG8gY29tcGlsZSBsaWJ4c2x0L3hzbHRwcm9jIG9uIFdpbmRvd3MKCkZyaSBKdW4gMjIgMDA6MDQ6MzYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBhdHRlbXB0IHRvIHdvcmsgYXJvdW5kIHdoYXQgc2VlbWVkIGEgZ2NjIG9wdGltaXplcgoJICBidWcgd2hlbiBoYW5kbGluZyBmbG9hdHMgb24gaTM4NiBodHRwOi8vdmVpbGxhcmQuY29tL2djYy5idWcKCSogdHJlZS5jIGVudGl0aWVzLmMgZW5jb2RpbmcuYzogZG9pbmcgc29tZSBjbGVhbnVwcyB3aGlsZQoJICBjaGFzaW5nIGl0CgpUaHUgSnVuIDIxIDEzOjEzOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGNsZWFudXAgd2hlbiAtLXdpdGhvdXQtZGVidWcgaXMgc3BlY2lmaWVkCgkqIHhpbmNsdWRlLmMgeHBhdGguYyB4cGF0aEludGVybmFscy5oIHhwb2ludGVyLmM6IGNsZWFudXAKCSAgdy5yLnQuIC0td2l0aG91dC1kZWJ1ZyBhbmQgb3RoZXIgaW5jbHVkZSBwb2ludHMKCSogY2F0YWxvZy5oIHRlc3RDYXRhbG9nLmM6IGEgYml0IG9mIGNsZWFudXAgYW5kIHByZXBhcmUgZm9yIFhNTAoJICBDYXRhbG9ncwoJKiBjb25maWd1cmUuaW4gZW50aXRpZXMuaCB0cmVlLmggSFRNTHBhcnNlci5jOiByZW1vdmVkCgkgIC0td2l0aG91dC1jb3JiYSwgbWFkZSB0aGUgX3ByaXZhdGUgZmllbGQgbWFuZGF0b3J5CgpXZWQgSnVuIDIwIDE5OjM3OjI1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmMgZW5jb2RpbmcuYzogU2luY2UgTm90ZXBhZCBvbiBXaW4yawoJICBvdXRwdXRzIGEgQk9NIGluIFVURjgsIGFuIGVycmF0YSBoYXMgYmVlbiBpc3N1ZWQgdG8gYXZvaWQgdGhlCgkgIHByb2JsZW0sIHRoYXQgd2FzIHRoZSBtb3N0IHJlYXNvbmFibGUgc29sdXRpb24uLi4gQWRkIHN1cHBvcnQKCSAgZm9yIGEgbGVhZGluZyBVVEY4IEJPTSBpbiBlbnRpdGllcy4KCldlZCBKdW4gMjAgMTU6Mzg6NTkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBmaXhlZCBhIGJ1ZyBmb3VuZCB3aGVuIHBvc3QgdmFsaWRhdGluZyBhbiBlbnRpdHkgcmVmCgkqIHhtbGxpbnQuYzogYWRkZWQgLS1sb2FkZHRkIGFuZCBzbGlnbHkgY2hhbmdlZCAtLXBvc3R2YWxpZCB0bwoJICBhY3RpdmF0ZSBpdCB0b28KClR1ZSBKdW4gMTkgMjA6MDM6NDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmMgeGluY2x1ZGUuYyB4cG9pbnRlci5jOiBidWcgIzU2NDAyIGV4cG9zZWQgYSBudW1iZXIgb2YKCSAgd2Vha25lc3MgaW4gdGhlIG5vZGUgY29weSB0aGUgWFBvaW50ZXIgYW5kIHRoZSBYSW5jbHVkZQoJICBpbXBsZW1lbnRhdGlvbnMuIFNlcmlvdXMgY2xlYW51cC4KClR1ZSBKdW4gMTkgMTQ6NTA6MTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogS2phcnRhbiBNYXJhYXMgcHJvdmlkZWQgYSBzbWFsbCBwYXRjaCB0bwoJICBhZGQgeG1sMi1jb25maWcuaW4gdG8gRVhUUkFfRElTVAoKVHVlIEp1biAxOSAxMzowNDoxMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmMgdHJlZS5jIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jOiBTdGVwaGFuIEt1bG93CgkgIHByb3ZpZGVkIGFub3RoZXIgZmFpbGluZyBjYXNlIGZvdW5kIGluIEtERSwgdGhlIHdheSB0aGUKCSAgY3R4dC0+dmN0eHQubm9kZVRhYiB3YXMgYWxsb2NhdGVkIGFuZCBmcmVlZCBjaGFuZ2VkIG92ZXIKCSAgdGltZSBidXQgaXQgd2Fzbid0IGNvbXBsZXRlbHkgY2xlYW5lZCB1cC4gVGhpcyBzaG91bGQgZml4IGl0LgoKU3VuIEp1biAxNyAxOTo1NjozMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBTdGVwaGFuIEt1bG93IGFsc28gcmFpc2VkIHRoZSBmYWN0IHRoYXQgbGluZSBudW1iZXIKCSAgY291bGQgZ2V0IG1pc2NvdW50ZWQgbWFraW5nIGRlYnVnIGhhcmRlciwgZml4ZWQgdGhlIHByb2JsZW0KCSAgaW4geG1sUGFyc2VDaGFyRGF0YSgpCgpTdW4gSnVuIDE3IDE5OjE3OjI2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogU3RlcGhhbiBLdWxvdyBwb2ludGVkIG91dCBhIHByb2JsZW0gd2hlbiB2YWxpZGF0aW5nCgkgIGFuZCB1c2luZyBhbiBlbXB0eSBlbnRpdHksIGZvcmdvdCBhICdicmVhaycgaW4gYSBjYXNlLgoKU3VuIEp1biAxNyAxNjo0Nzo0MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sSGFzTnNQcm9wKCkgYWNjb3JkaW5nbHkgdG8gYnVnICM1NTY4MwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgd2l0aCAyLjMuMTEKClN1biBKdW4gMTcgMTI6MjQ6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBUT0RPOiB1cGRhdGVkIGFkZGluZyBjbGVhbnVwIG9mIGdlbmVyYXRlZCBkb2MKCSogY29uZmlndXJlLmluOiBwcmVwYXJlZCB0byByZWxlYXNlIDIuMy4xMQoJKiB4bWxsaW50LmM6IGFkZGVkIC0tdmVyc2lvbiBmb3IgYnVnIHJlcG9ydGluZwoJKiBkb2MvaHRtbC8qLmh0bWw6IHJlYnVpbHQgdGhlIGRvYwoKU2F0IEp1biAxNiAyMzoyMzozMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpcnN0IHBhcnQgb2YgdGhlIHdvcmsgb24gc2VsZWN0aW5nIG5hbWVzcGFjZSB0bwoJICBmaXggYnVnICM1NjExNSAKClNhdCBKdW4gMTYgMDA6MjA6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBleGFtcGxlL01ha2VmaWxlLmFtOiBMYXN6bG8gUEVURVIgcHJvdmlkZWQgYSBmaXgKCSAgd2hlbiB1c2luZyAtbGljb252CgkqIFRPRE86IHVwZGF0ZWQKCkZyaSBKdW4gMTUgMDc6MDg6NTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5bY2hdOiBtb3JlIHdvcmsgb24gdGhlIEhUTUwgc2VyaWFsaXphdGlvbiByb3V0bmVzLAoJICBjbGVhbnVwLCBlbmNvZGluZyBzdXBwb3J0LgoKVGh1IEp1biAxNCAxMDozMToxNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IFRob21hcyBCcm95ZXIgc3VnZ2VzdGVkIGEgYmV0dGVyIHBhdGNoIGZvciB0aGUgLyBhcmcKClRodSBKdW4gMTQgMDE6MDE6MzAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBidWcgZGV0ZWN0ZWQgYnkgQW5raCB3aGVuIC8gaXMgdXNlZCBhcyBhIGZ1bmN0aW9uIGFyZwoKV2VkIEp1biAxMyAyMzowODo0NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuW2NoXSBIVE1MdHJlZS5jOiBzdG9yZWQgdGhlIGlubGluZS9ibG9jayBwcm9wZXJ0eQoJICBvZiBlbGVtZW50IGFuZCB1c2UgaXQgdG8gYXZvaWQgb3V0cHV0dGluZyBmb3JtYXR0aW5nIHNwYWNlcyBhdAoJICB0aGUgd3JvbmcgcGxhY2UuIEltcGxlbWVudGVkIHRoZSBmb3JtYXQgcGFyYW1ldGVyIGZvciBIVE1MIHNhdmUuCgkqIHJlc3VsdC9IVE1ML2RvYzIuaHRtIHJlc3VsdC9IVE1ML2RvYzMuaHRtIHJlc3VsdC9IVE1ML2ZwNDAuaHRtCgkgIHJlc3VsdC9IVE1ML3NjcmlwdC5odG1sIHJlc3VsdC9IVE1ML3Rlc3QyLmh0bWwgcmVzdWx0L0hUTUwvdGVzdDMuaHRtbAoJICByZXN1bHQvSFRNTC93aXJlZC5odG1sOiBvZiBjb3Vyc2UgdGhpcyBpbXBhY3QgdGhlIHJlc3VsdCBvZiBhCgkgIG51bWJlciBvZiBIVE1MIHRlc3RzCgpUaHUgSnVuIDE0IDA5OjQ5OjA5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuW2NoXTogc3RhcnRlZCBhdWdtZW50aW5nIHRoZSBIVE1MIHNhdmUgQVBJIHdpdGgKCSAgZW5jb2RpbmcgYW5kIGZvcm1hdHRpbmcgcGFyYW1ldGVycwoKV2VkIEp1biAxMyAwOTo0NDoxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmg6IGNsZWFudXAgYW5kIHN0YXJ0ZWQgZXZhbHVhdGluZyB0aGUgd29yayBuZWVkZWQgb24KCSAgcmV2YW1waW5nIHRoZSBIVE1MIG91dHB1dCBjb2RlCgpNb24gSnVuIDExIDE5OjI5OjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogRE9DQnBhcnNlci5jOiBoYW5kbGluZyBvZiBQSXMgYW5kIDw/c2dtbC1kZWNsYXJhdGlvbiBpbiBlbnRpdGllcy4KClR1ZSBKdW4gMTIgMDg6NDY6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBmaXhlZCBidWcgIzU2MDQ5LCBmb3Jnb3Qgb25lIGNoZWNrIGluIHRoZQoJICB2YWxpZGF0aW9uIHJvdXRpbmUKClR1ZSBKdW4gMTIgMDg6MDk6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF06IGdycnIgLi4uIG5hbWVzcGFjZSBpcyBhIEMrKyByZXNlcnZlZCBrZXl3b3JkCgpUdWUgSnVuIDEyIDA2OjI5OjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbGlieG1sLmg6IGZpeGVkIGFuIGVycm9yIGluIGxhc3QgY29tbWl0CgkqIGRvYy9GQVEuaHRtbDogYWRkZWQgYW4gZW50cnkgZm9yIGNvbXBpbGF0aW9uIGZyb20gQ1ZTCgpNb24gSnVuIDExIDEwOjA3OjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sdmVyc2lvbi5oLmluIGxpYnhtbC5oOiBDeWd3aW4gcGF0Y2hlcwoJKiB0cmVlLmM6IHhtbEZyZWVOb2RlTGlzdCBwYXRjaCBzaW1pbGFyIHRvIHhtbEZyZWVOb2RlIG9uZQoJKiB0cmVlLmg6IGNsZWFudXAKClNhdCBKdW4gIDkgMTk6MTY6MDAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHBhdGNoZWQgeG1sRnJlZU5vZGUoKSB0byBhdm9pZCBmcmVlaW5nKCkgYSBzdGF0aWMKCSAgbWVtb3J5IGJsb2NrIGluIGEgc3RyYW5nZSBjYXNlIHdoZXJlIGxpYnhtbCBpcyBsaW5rZWQgdHdpY2UKCSAgaW4gdGhlIGJpbmFyeS4KClNhdCBKdW4gIDkgMTg6Mzk6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiAoYT8gLCBiPyAsIGM/ICwgLi4uICwgej8pIHdhcyBzdG9yaW5nL3Jlc3RhdXJpbmcKCSAgc3RhdGUgZmFyIHRvbyBvZnRlbiwgc2ltcGxlIGZpeCB1c2VkIHRvIGF2b2lkIGl0LgoKU2F0IEp1biAgOSAxNjoxMDozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhpbmNsdWRlLmM6IFJhcGhhZWwgSGVydHpvZyBoYWQgYSB0cm91YmxlIHdpdGggRFREIG5vZGVzCgkgIGJlaW5nIHByb2Nlc3NlZCwgYXBwbGllZCBoaXMgcGF0Y2gKCSogdHJlZS5jOiBmaXhlZCBhIGJ1ZyByYWlzZWQgaW4geG1sU3RhdGljQ29weU5vZGVMaXN0KCkKClNhdCBKdW4gIDkgMTU6NTA6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYyB1cmkuYyBpbmNsdWRlL3dpbjMyY29uZmlnLmg6IElnb3IgIFpsYXRrb3ZpYwoJICBwcm92aWRlZCBmaXhlcyB0byBjb21waWxlIG9uIE1TQ0MgYWdhaW4KCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmMgd2luMzIvbGlieG1sMi9saWJ4bWwyKi5kc3A6IGhlCgkgIGFsc28gcHJvdmlkZWQgYW4gdXBkYXRlIGZvciB0aGUgcHJvamVjdCBmaWxlcy4KClRodSBKdW4gIDcgMjE6NTI6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGFwcGxpZWQgU3RldmUgVGlubmV5IHBhdGNoIHRvIHhtbE5ld05zUHJvcCB0byBmaXgKCSAgYnVnICM1NTgxMAoKVGh1IEp1biAgNyAyMToyOTozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgeG1sR2V0TnNQcm9wKCkgdG8gY2xvc2UgYnVnICM1NTY4MwoJICBOb3RlIHRoaXMgcmVxdWlyZXMgbGlieHNsdCB0byB1c2UgaXQncyBvd24gZnVuY3Rpb24gaW5zdGVhZC4KClRodSBKdW4gIDcgMTg6MDY6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiB3aGVuIGluIGEgcHJlIGVsZW1lbnQgbm8gZm9ybWF0dGluZyBzcGFjZSBzaG91bGQKCSAgYmUgYWRkZWQuCgkqIHRlc3QvSFRNTC9wcmUuaHRtbCByZXN1bHQvSFRNTC9wcmUuaHRtbCo6IGFkZGVkIGEgcmVncmVzc2lvbiB0ZXN0CgpUaHUgSnVuICA3IDE3OjI5OjM4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBhZGRlZCB0ZXN0cyBmb3Igc2lnbmFsKCkgYW5kIHNpZ25hbC5oCgpGcmkgSnVuICA4IDEwOjE3OjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogcm9iZXJ0IHBvaW50ZWQgb3V0IHhtbFhQYXRoTklORiB3YXMgbm90IGluaXRpYWxpemVkCgpGcmkgSnVuICA4IDEwOjAxOjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL2xpYnhtbC1kb2MuZWw6IEZlbGl4IE5hdHRlciBwcm92aWRlZCBhIG5ldyB2ZXJzaW9uIGZvcgoJICBsaWJ4bWwyCgpGcmkgSnVuICA4IDA3OjIwOjQ2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogd2hlbiBpbiBhIHByZSBlbGVtZW50IG5vIGZvcm1hdHRpbmcgc3BhY2Ugc2hvdWxkCgkgIGJlIGFkZGVkLgoKV2VkIEp1biAgNiAxODowNzozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYWRkIC1taWVlZSB0byBDRkxBR1Mgd2hlbiBjb21waWxpbmcgb24gTGludXgvYWxwaGEKClRodSBKdW4gIDcgMDY6NDQ6MDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmM6IGltcGxlbWVudGVkIHRoZSA8P3NnbWwtZGVjbGFyYXRpb24gZW5jb2Rpbmc9Inh4eCI/PgoJICBoYWNrCgkqIHRyZWUuW2NoXTogYWRkZWQgeG1sSGFzTnNQcm9wIGFzIHN1Z2dlc3RlZCBpbiBidWcgcmVwb3J0ICM1NTY1MyAKCSogdXJpLmM6IGZpeGVkIGEgd2FybmluZwoKVHVlIEp1biAgNSAyMjo1NDoyMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IHRyeWluZyB0byBjbG9zZSBidWcgIzU1NzcyIGVzY2FwaW5nIGluIHNjcmlwdAoJICBlbGVtZW50cwoJKiBkb2MveG1sLmh0bWw6IHN1Z2dlc3QgdG8gc2VuZCBtYWlsIHRvIHRoZSBsaXN0CgpUdWUgSnVuICA1IDE5OjExOjAyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXJyb3IuYzogYXR0ZW1wdCB0byBmaXggdGhlIHhtbEdldFZhclN0ciBicmVha2FnZSBvbmNlIGFuZCBmb3IKCSAgZ29vZC4gVXNlIGEgbWFjcm8gYW5kIGJhc2VkIG9uIHRoZSBzb2x1dGlvbiBwcm92aWRlZCBpbiAKCSAgdnNucHJpbnRmIG1hbnVhbCBwYWdlIGZyb20gR05VLgoKVHVlIEp1biAgNSAxNDo0NjoxMCBDRVNUIDIwMDEgQmpvcm4gUmVlc2UgPGJyZWVzZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgoJKiBlcnJvci5jOiBXb3JrYXJvdW5kIGZvciBub24tcHJlc2VydmluZyB2YXJpYWRpYyBsaXN0LgoJKiB0cmlvLmMgdHJpby5oIHRyaW9wLmggc3RyaW8uYyBzdHJpby5oOiBVcGdyYWRlZCB0byB0cmlvIGJhc2VsaW5lIDEuNAoKU2F0IEp1biAgMiAwNjoxMjozMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogYWRkZWQgMi4zLjEwIHJlbGVhc2UKCkZyaSBKdW4gIDEgMTE6Mjc6MTEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHJlbGVhc2luZyAyLjMuMTAKClRodSBNYXkgMzEgMjA6NDI6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBHYXJ5IFBlbm5pbmd0b24gc3BvdHRlZCBhIGZldyB0cm91YmxlcyB3aXRoIGZpbGU6Ly8vCgpUaHUgTWF5IDMxIDIwOjE4OjU5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW5jb2RpbmcuYzogUm9iZXJ0IENvbGxpbnMgcHJvdmlkZWQgYSBwYXRjaCB0byBhZGQgdGhlCgkgICJVUy1BU0NJSSIgZW5jb2RpbmcgYWxpYXMKCldlZCBNYXkgMzAgMjE6MTI6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIGVuY29kaW5nLltjaF06IFdpbGxpYW0gTS4gQnJhY2sgcHJvdmlkZWQgYSBzZXQgb2YgVVRGOAoJICBzdHJpbmcgb3JpZW50ZWQgZnVuY3Rpb25zIGFuZCBzdGFydGVkIGNsZWFuaW5nIHRoZSByZWxhdGVkIGFyZWFzCgkgIGluIHhwYXRoLmMgd2hpY2ggbmVlZGVkIGZpeGluZyBpbiB0aGlzIHJlc3BlY3QKCldlZCBNYXkgMzAgMjA6MzA6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1MdHJlZS5jOiBhcHBsaWVkIHBhdGNoIGZyb20gSmFyb3NsYXcgS29sYWtvd3NraSB0byBjbG9zZSBidWcKCSAgIzU1MzgwCgkqIHRyZWUuYzogcGF0Y2ggdG8geG1sTm9kZUdldENvbnRlbnQoKSB0byBnZXQgQ0RBVEEgc2VjdGlvbiBjb250ZW50CgpNb24gTWF5IDI4IDEyOjU2OjI5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogVE9ETzogdXBkYXRlZAoJKiBuYW5vaHR0cC5bY2hdIDogc3RhcnRlZCBhZGRpbmcgQVBJcyB0byBnZXQgdGhlIHJlZGlyZWN0ZWQgVVJMCgkgIHdoZW4gdGhpcyBvY2N1cnMgKG5lZWRlZCBmb3IgZnVydGhlciBiYXNlIGNvbXB1dGF0aW9uCgkqIHRyZWUuaDogY2xlYW51cAoJKiBlbmNvZGluZy5jOiBjbGVhbnVwCgkqIFNBWC5jOiBtaW5vciBjaGFuZ2UgYXJvdW5kIGN0eHQtPmxvYWRzdWJzZXQKCkZyaSBNYXkgMjUgMDk6MzY6MjYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSBpbmNsdWRlL01ha2VmaWxlLmFtOiBzbWFsbCBjaGFuZ2UgdG8gaGF2ZQoJICBpbmNsdWRlL2xpYnhtbCByZWJ1aWx0IGlmIHdvcmtpbmcgZnJvbSBDVlMuCgkqIHVyaS5jOiBhcHBsaWVkIGFub3RoZXIgcGF0Y2ggZnJvbSBDYXJsIERvdWdsYXMgZm9yIFVSSSBlc2NhcGluZywKCSAgdGhpcyBzaG91bGQgY2xvc2UgYnVnICM1MTg3NgoKV2VkIE1heSAyMyAxNTo0MDoyNyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhpbmNsdWRlLmM6IGZpeGVkIFhJbmNsdWRlIHJlY3Vyc2l2ZSBiZWhhdmlvdXIgYnVnICM1NDY3OAoJKiByZXN1bHQvWEluY2x1ZGUvcmVjdXJzaXZlLnhtbCB0ZXN0L1hJbmNsdWRlL2RvY3MvcmVjdXJzaXZlLnhtbAoJICB0ZXN0L1hJbmNsdWRlL2VudHMvaW5jLnR4dCB0ZXN0L1hJbmNsdWRlL2VudHMvc3ViLWluYy5lbnQ6CgkgIGFkZGVkIHNwZWNpZmljIHJlZ3Jlc3Npb24gdGVzdAoJKiBwYXJzZXIuaDogcHJlcGFyaW5nIGZvciB0aGUgWFNMVCBtb2RlIHdoZXJlIERURCBpbmhlcml0ZWQKCSAgYXR0cmlidXRlcyBhcmUgYWRkZWQgdG8gdGhlIHRyZWUuCgpXZWQgTWF5IDIzIDEzOjU5OjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeGluY2x1ZGUuW2NoXTogVXBkYXRlZCB0aGUgbmFtZXNwYWNlIGZvciB0aGUgTGFzdCBDYWxsIHZlcnNpb24KCSogcmVzdWx0L1hJbmNsdWRlL2luY2x1ZGUgdGVzdC9YSW5jbHVkZS9pbmNsdWRlOiB1cGRhdGVkIHRoZQoJICB0ZXN0c3VpdGUgYWNjb3JkaW5nbHkKCldlZCBNYXkgMjMgMTI6Mjc6NDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB1cmkuW2NoXTogYXBwbGllZCBhIHBhdGNoIGZyb20gQ2FybCBEb3VnbGFzIGZvciBVUkkgZXNjYXBpbmcsCgkgIHJlbGF0ZWQgdG8gYnVnICM1MTg3NgoKVHVlIE1heSAyMiAxODo0Njo1NiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogZml4ZWQgYSBncm9zcyBtaXN0YWtlIGluIGJhc2UgY29tcHV0YXRpb24sIHhtbDpiYXNlIGlzCgkgIG5vdCBjb21wbGV0ZWx5IGNvcnJlY3QgeWV0IChuZWVkIGNhc2NhZGUpLgoJKiB4cGF0aC5bY2hdOiBhZGRlZCB0aGUgZmV3IHRoaW5ncyBuZWVkZWQgdG8gZmluZCBhIGZ1bmN0aW9uIG5hbWUKCSAgYW5kIFVSSSBmcm9tIHRoZSBYUGF0aCBjb250ZXh0IHdoZW4gaXQgaXMgY2FsbGVkLgoKVHVlIE1heSAyMiAxNzowMDozNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNhdGFsb2cuW2NoXTogZml4ZXMgYW5kIGFkZCB4bWxMb2FkQ2F0YWxvZ3MoKQoJKiBET0NCcGFyc2VyLmM6IHNtYWxsIGNsZWFudXAKCSogeG1sbGludC5jOiBhZGRlZCBhIC0tY2F0YWxvZ3Mgb3B0aW9uIHRvIGxvYWQgY2F0YWxvZ3MgZnJvbQoJICAkU0dNTF9DQVRBTE9HX0ZJTEVTCgkqIHRyZWUuYzogY2xlYW51cAoJKiBjb25maWd1cmUuaW46IGljb252IGxpYnJhcnkgZml4dXAsIElDT05WX0xJQlMgCgpNb24gTWF5IDIxIDE2OjA1OjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY2F0YWxvZy5jOiBoYW5kbGluZyBvZiBDQVRBTE9HIGVudHJpZXMuIGRldGVjdGlvbiBvZiByZWN1cnNpb24sCgkgIGFuZCBhIGZldyBidWdmaXhlcwoJKiB4cGF0aC5jOiBmaXhpbmcgYnVnICM1NDk1MSBRTkFNRSB3aXRoIG5vIHByZWZpeCBzaG91bGQgbm90IG1hdGNoCgkgIGFnYWluc3QgdGhlIGRlZmF1bHQgbmFtZXNwYWNlCgpNb24gTWF5IDIxIDEwOjE0OjA3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogSm9lIE9ydG9uIHJlcG9ydGVkIGEgYnVnIGZvdW5kIHdpdGggSVJJeCBjb21waWxlci4KClN1biBNYXkgMjAgMTU6MTU6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgcHJvcGFnYXRpb24gY29udGV4dCBpbmZvIHdoZW4gcGFyc2luZyBhbgoJICBleHRlcm5hbCBlbnRpdHkuCgkqIGRvYy9odG1sLyouaHRtbDogcmVnZW5lcmF0ZWQgYSBjb3VwbGUgb2YgZG9jcwoKU2F0IE1heSAxOSAxNzoxMToxNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlIHdpdGggMi4zLjkgaW5mb3JtYXRpb25zCgpTYXQgTWF5IDE5IDE2OjUwOjQ3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuaCBkZWJ1Z1hNTC5oIHBhcnNlckludGVybmFscy5oIHRyZWUuaCB2YWxpZC5jCgkgIHhtbHZlcnNpb24uaC5pbiB4cGF0aEludGVybmFscy5oIHhwYXRoLmg6IHNvbWUgY2xlYW51cCBmb3IgZ3RrLWRvYwoJKiBkb2MvaHRtbC8qIDogcmVidWlsdCB0aGUgZG9jcwoJKiB2YWxpZC5jOiBzbWFsbCBwYXRjaCB3aGljaCBtYXkgaW1wcm92ZSBzb21lIGNhc2Ugd2hlbgoJICB2YWxpZGF0aW5nLgoKU2F0IE1heSAxOSAxNToyMDowMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogQ2xvc2VkIGJ1ZyAjNTQ4OTEKCSogcmVzdWx0L0hUTUwvY2ZfMTI4Lmh0bWwqIHRlc3QvSFRNTC9jZl8xMjguaHRtbDogYWRkZWQgdGhlIHRlc3QKCSAgdG8gdGhlIHN1aXRlCgpUaHUgTWF5IDE3IDE0OjE1OjA3IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW5jb2RpbmcuaCBoYXNoLmMgbmFub2Z0cC5oIHBhcnNlci5oIHRyZWUuaCB1cmkuaCB4bGluay5oIHhwb2ludGVyLmM6CgkgIGFwcGxpZWQgYSBkb2N1bWVudGF0aW9uIHBhdGNoIGZyb20gTG90UiBhbmQgZmlsbGVkIGluIGEgZmV3IG1pc3NpbmcKCSAgZGVzY3JpcHRpb25zCgpXZWQgTWF5IDE2IDIzOjAyOjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyB0cmVlLmMgcGFyc2VyLmM6IHNwZWVkIG9wdGltaXphdGlvbnMgYXQgdGhlIHBhcnNlciBsZXZlbAoJICBkb2N1bWVudCB0cmVlIGZyZWVpbmcgYW5kIHhwYXRoIGV2YWx1YXRpb24KCldlZCBNYXkgMTYgMTI6NTU6NDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYyBwYXJzZXIuaCBwYXJzZXJJbnRlcm5hbHMuaDogZml4ZWQgYSBjb3VwbGUgb2YKCSAgaW50ZXJmYWNlcyBmb3IgaGFuZGxpbmcgbWVtb3J5IGJ1ZmZlciBpbnB1dCB0byBjb25zdCBjaGFyICoKCSAgdXBvbiBzdWdnZXN0aW9uIG9mIEphbWVzSC4KClR1ZSBNYXkgMTUgMTc6MjI6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IExvVFIgc2VudCBhIHBhdGNoIGZpeGluZyB0aGUgcHJldmlvdXMgY29tbWl0IAoKVHVlIE1heSAxNSAxNDo0MDowNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogdHJ5aW5nIHRvIGRlYWwgYWdhaW4gd2l0aCB0aGUgc3Rvb3BpZCAtUiBsaW5raW5nCgkgIGZsYWcgb2YgU29sYXJpcwoKVHVlIE1heSAxNSAxMjo0OTo1MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmg6IHR3byBub2Rlc2V0IGFjY2VzcyBtYWNyb3MgZnJvbSBUaG9tYXMgQnJveWVyCgpUdWUgTWF5IDE1IDExOjQyOjM5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYyB4cGF0aC5oIHhwYXRoSW50ZXJuYWxzLmg6IGFwcGx5IGFuIFhQYXRoIEFQSSBjbGVhbnVwCgkgIHBhdGNoIGZyb20gVGhvbWFzIEJyb3llcgoKVHVlIE1heSAxNSAxMDo1MjoxOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmMgdGVzdC9WQ00vdjJbMzRdLnhtbDogRml4ZWQgYnVnICM1NDYzMSBhZGRlZCBzcGVjaWZpYyB0ZXN0CgkgIGNhc2UKCSogSU5TVEFMTDogd2FzIGVtcHR5IGFkZGVkIHN0dWZmIGZyb20gdGhlIEZBUQoKRnJpIE1heSAxMSAxOTozNzozMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXTogZml4aW5nIGJ1ZyAjNTQ0NDYsIGJ5IGNsZWFuaW5nIHNvbWUgYnVncyBpbiB0aGUKCSAgYXR0cmlidXRlcyBoYW5kbGluZyBhbmQgIzU0NDMzIGJ5IGFkZGluZyB4bWxVbnNldFByb3AoKQoJICBhbmQgeG1sVW5zZXROc1Byb3AoKQoKRnJpIE1heSAxMSAxNjowNzoxMyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogUGF0Y2ggZnJvbSBKb25hcyBCb3Jnc3Ry9m0KCShodG1sR2V0RW5kUHJpb3JpdHkpOiBOZXcgZnVuY3Rpb24sIHJldHVybnMgCgl0aGUgcHJpb3JpdHkgb2YgYSBjZXJ0YWluIGVsZW1lbnQuCgkoaHRtbEF1dG9DbG9zZU9uQ2xvc2UpOiBPbmx5IGNsb3NlIGlubGluZSBlbGVtZW50cyBpZiB0aGV5IAoJYWxsIGhhdmUgbG93ZXIgb3IgZXF1YWwgcHJpb3JpdHkuCgkqIHJlc3VsdC9IVE1MOiB0aGlzIG9mIGNvdXJzZSBjaGFuZ2VkIGEgbnVtYmVyIG9mIHRlc3RzIHJlc3VsdHMuCgpUaHUgTWF5IDEwIDE3OjMwOjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYyBjYXRhbG9nLmM6IHBsdWdnZWQgaW4gdGhlIGRlZmF1bHQgY2F0YWxvZyByZXNvbHV0aW9uCgkqIGRvYy9nbm9tZS14bWwuc2dtbDogbGlua2VkIGluIHRoZSBEb2Nib29rIHBhcnNlciBhbmQgY2F0YWxvZwoJICBkb2N1bWVudGF0aW9ucwoJKiBkb2MvaHRtbC9saWJ4bWwtKi5odG1sOiByZWJ1aWxkIGFkZGVkIHRoZSBtaXNzaW5nIG9uZXMgdG8gQ1ZTCgpUaHUgTWF5IDEwIDE2OjE0OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0geG1sdmVyc2lvbi5oLmluIGNvbmZpZ3VyZS5pbiBpbmNsdWRlL01ha2VmaWxlLmFtOgoJICBpbnRlZ3JhdGluZyBjYXRhbG9ncwoJKiBjYXRhbG9nLltjaF0gdGVzdENhdGFsb2cuYzogYWRkaW5nIGEgc21hbGwgY2F0YWxvIEFQSQoJICAob25seSBTR01MIGNhdGFsb2cgc3VwcG9ydCkuCgkqIHBhcnNlci5jOiByZXN0YXVyZWQgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCkgQVBJCgpXZWQgTWF5ICA5IDEyOjUwOjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiB6YkBiaXNwLmNvbSByZXBvcnRlZCBhbiBlcnJvciBpbiB4bWxOb2RlR2V0TGFuZygpCgpUdWUgTWF5ICA4IDEyOjMxOjQwIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGFkZGVkIHhtbFBhcnNlRXh0ZXJuYWxFbnRpdHlQcml2YXRlKCkgdG8gYWxsb3cKCSAgcHJvcGFnYXRpb24gb2YgY3R4dC0+X3ByaXZhdGUgd2hlbiBwYXJzaW5nIGV4dGVybmFsIGVudGl0aWVzCgpUdWUgTWF5ICA4IDEwOjI2OjIyIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogZml4ZWQgdGhlIGJ1ZyByZXBvcnRlZCBieSBCam9ybiBpbiBodG1sTm9kZUR1bXAKClR1ZSBNYXkgIDggMDk6MzA6MTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpeGVkIGEgc21hbGwgcG9ydGFiaWxpdHkgcHJvYmxlbSB3aXRoIEFNX0NPTkRJVElPTkFMCgpNb24gTWF5ICA3IDIyOjQ0OjQ1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogd2FybiB3aGVuIGluZGV0ZXJtaW5pc3QgY29udGVudCBtb2RlbCBpcyBkZXRlY3RlZAoJKiByZXN1bHQvVkMvRWxlbWVudFZhbGlkODogdGhpcyBhZGRzIGEgbWVzc2FnZQoJKiBNYWtlZmlsZS5hbTogYWRkIC0tbm92YWxpZCBmb3IgVkNNIHRlc3RzCgkqIHBhcnNlckludGVybmFscy5jOiBhZGRlZCBhIGNhbGwgdG8gSW5pdCBtZW1vcnkgCgpGcmkgTWF5ICA0IDE5OjUxOjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBodG1sTmV3RG9jIFNZU1RFTSBhbmQgUFVCTElDIElEIGludmVyc2lvbgoJICB3aGVuIGJvdGggcGFyYW1ldGVycyBhcmUgTlVMTC4KCkZyaSBNYXkgIDQgMTc6MTk6MzkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBhcHBsaWVkIHNtYWxsIHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uLCByZWluZGVudGVkCgkgIHNvbWUgcGFydCBvZiB0aGUgY29kZS4KClRodSBNYXkgIDMgMTM6MTA6NDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW4gZG9jL3htbC5odG1sIGRvYy9odG1sLyo6IHByZXBhcmluZyBmb3IgMi4zLjgKCSAgcmVsZWFzZSwgdXBkYXRlZCBhbmQgcmVnZW5lcmF0ZWQgdGhlIGRvY3MKClRodSBNYXkgIDMgMTI6NDc6NDYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIHJlc3VsdC9YUGF0aC9leHByL2Zsb2F0cyA6IGNsYXJpZmllZCBhbmQgY2xlYW51cAoJICBwcmludGluZyBvZiBhYm5vcm1hbCBmbG9hdHMgaW4gdGVzdHMuCgpUaHUgTWF5ICAzIDEwOjI1OjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiB0cnlpbmcgdG8gZml4IHRoZSBwcm9ibGVtIHJlcG9ydGVkIGJ5IEpvbmFzIEJvcmdzdHL2bQoJKiByZXN1bHRzL0hUTUwvIDogYSBmZXcgY2hhbmdlcyBpbiB0aGUgb3V0cHV0IG9mIHRoZSBIVE1MIHRlc3RzIGFzCgkgIGEgcmVzdWx0LgoJKiBjb25maWd1cmUuaW46IHR5aW5nIHRvIGZpeCAtbGljb252IHdoZXJlIG5lZWRlZAoKV2VkIE1heSAgMiAxOToxMDoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBmaXhlZCBhIHN0dXBpZCBlcnJvcgoKV2VkIE1heSAgMiAxODozOTozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbTogbWFrZSB0aGUgaW5jbHVzaW9uIG9mIHRoZSB0cmlvCgkgIG1vZHVsZXMgaW4gdGhlIGxpYnJhcnkgY29uZGl0aW9uYWwKCldlZCBNYXkgIDIgMTQ6Mzk6NTcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmM6IHBhdGNoZSBmcm9tICBM4XN6bPMgS2924WNzLCBmaXhlZCBlbnRpdGllcyByZWZzCgkgIGluIGF0dHJpYnV0ZXMgaGFuZGxpbmcKCldlZCBNYXkgIDIgMTI6NTY6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBCam9ybiBSZWVzZSBwcm92aWRlZCBhIGZpeCBmb3IgYSBwcm9ibGVtIG9uIGJ1ZmZlcgoJIGZsdXNoaW5nCgpNb24gQXByIDMwIDIyOjI5OjM0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4IG9mIGFuIFhTTFQgbmFtZXNwYWNlIGJ1ZyByZXBvcnRlZCBvbiB0aGUgbGlzdAoJICBnZW5lcmFsL2J1Zy04LQoKTW9uIEFwciAzMCAxOTo0Mjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHN0cmlvLmggdHJpby5jOiBEYW4gTWNOaWNob2wgc3VnZ2VzdGVkIGEgY291cGxlIG9mIHNtYWxsCgkgIGZpeGVzIGZvciBBSVggNC4zLjMgdXNpbmcgVmlzdWFsIEFnZSA1LjAuMiBjb21waWxlcgoKTW9uIEFwciAzMCAxMzo0NDo0OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYyBwYXJzZXIuYyBlbmNvZGluZy5jOiBzcGVudCBhIGJpdCBtb3JlIHRpbWUgbG9va2luZwoJICBhdCB0aGUgcGFyc2luZyBzcGVlZCBhbmQgRE9NIGhhbmRsaW5nLiBBZGRlZCBhIGZldyBtb3JlCgkgIHNwZWVkdXBzLgoKU3VuIEFwciAyOSAyMTo1Mzo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBzbWFsbCBidXQgZWZmZWN0aXZlIHBhcnNpbmcgc3BlZWQgaW1wcm92ZW1lbnQKClN1biBBcHIgMjkgMTk6MDI6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGRlZmF1bHQgb24gdGhlIERvY0Jvb2sgcGFyc2VyIGluY2x1c2lvbiAoZm9yIEdub21lKQoJKiBET0NCcGFyc2VyLmg6IGZpeGVkIGEgaGVhZGVyIHJlZmVyZW5jZQoKU2F0IEFwciAyOCAxOTowMDozOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiB4cGF0aC5jOiBhcHBsaWVkIEJqb3JuIHBhdGNoZXMgZm9yIEZQRSBvbiB0aGUKCSAgYWxwaGEKClNhdCBBcHIgMjggMTg6NTQ6MjggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF0geG1sSU8uaDogYXBwbGllZCBwYXRjaCBmcm9tIEpvZSBNY0FsZXJuZXkgdG8gYWRkCgkgIHhtbFNhdmVGb3JtYXRGaWxlVG8oKQoKU2F0IEFwciAyOCAxNjozMzowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHNpbXBsZSBhbmQgZWZmaWNpZW50IG9wdGltaXphdGlvbiwgWFBhdGggZnVuY3Rpb25zCgkgIGF3YXlzIGJpbmQgdG8gdGhlIHNhbWUgY29kZSwgY2FjaGUgdGhpcwoJKiBUT0RPOiB1cGRhdGVkIChieSBzYXlpbmcgc29tZSBpcyBvYnNvbGV0ZSkKClNhdCBBcHIgMjggMTQ6MjM6MzAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBtb3JlIGNsZWFudXAgd29yayBvbiBYUGF0aCBuYW1lIHBhcnNpbmcgcm91dGluZXMKCkZyaSBBcHIgMjcgMTk6MDY6MTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXJJbnRlcm5hbHMuYyB4cGF0aC5bY2hdOiBzb21lIFVURjggY2xlYW51cCBvbgoJICB4bWxYUGF0aFBhcnNlTmFtZQoJKiB4cGF0aC5jOiBJZ29yIFpsYXRrb3ZpYyBzdWdnZXN0ZWQgYSBjaGFuZ2UgZm9yIE5BTiBhbmQgTVNDCgkqIGRlYnVnWE1MLmM6IGF2b2lkIGNvbXBpbGF0aW9uIHByb2JsZW1zIGlmIGNvbXBpbGluZyB3aXRob3V0CgkgIEhUTUwgc3VwcG9ydCwgSWdvciBabGF0a292aWMKCSogd2luMzIvbGlieG1sMi9saWJ4bWwyLmRlZi5zcmM6IGJlaW5nIGFibGUgdG8gY29tcGlsZSB3aXRob3V0CgkgIFhQYXRoIG9uIFdpbmRvd3MKClRodSBBcHIgMjYgMjI6NTM6MDMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBsaWJ4bWwubTQ6IHlldCBhbm90aGVyIHBhdGNoIGZyb20gVG9zaGlvIEt1cmF0b21pCgpUaHUgQXByIDI2IDIxOjI3OjQzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogbGlieG1sLm00IGxpYnhtbDItc3BlYy5pbjogbmV3IHBhdGNoZXMgZnJvbSBUb3NoaW8gS3VyYXRvbWkKClRodSBBcHIgMjYgMjA6NTM6NDggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbFNhdmVGb3JtYXRGaWxlIGludGVyZmFjZSBmb3Igc2F2aW5nCgkgIGFuZCBpbmRlbnRpbmcgYSBmaWxlLgoKVGh1IEFwciAyNiAxNjozNTo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGJ1ZyAjNTM2ODkgcmVsYXRlZCB0byBwcm9jZXNzaW5nLWluc3RydWN0aW9uKCkKClRodSBBcHIgMjYgMTI6NTc6NTggQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmM6IHBhdGNoZSBmcm9tICBM4XN6bPMgS2924WNzCgpUaHUgQXByIDI2IDExOjMxOjU0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGFwcGxpZWQgZml4ZXMgZnJvbSBDaHJpc3RpYW4gR2xhaG4gYnVnIHJlcG9ydCAjNTMzOTEKClRodSBBcHIgMjYgMTE6MTQ6NTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlcnJvci5jOiBKZWFuIEZyYW7nb2lzIExlY29tdGUgcHJvdmlkZWQgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbgoJICBhbmQgYSBmaXggdG8gYnVnICM1MzUzNwoKVGh1IEFwciAyNiAwOTo0Mjo1OCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGxpYnhtbC5tNDogYWRkZWQgQU1fUEFUSF9YTUwyIHByb3ZpZGVkIGJ5IFRvc2hpbyBLdXJhdG9taQoKV2VkIEFwciAyNSAyMTowNTozMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIERPQ0JwYXJzZXIuYyBTQVguYzogYSBiaXQgbW9yZSB3b3JrIG9uIGVudGl0aWVzIHByb2Nlc3NpbmcuCgkgIFN0aWxsIE5lZWQgdG8gY2xlYW51cCBYTUwgb3V0cHV0IGFuZCByZWZlcmVuY2VzIGluIGF0dHJpYnV0ZXMKCldlZCBBcHIgMjUgMTc6NTI6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmMgaW5jbHVkZS9NYWtlZmlsZS5hbTogdHdvIHBhdGNoZXMgZnJvbSAgTOFzemzzIEtvduFjcwoKV2VkIEFwciAyNSAxNDo1NjoyNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogdHJ5aW5nIHRvIGZpeCAjNTM1NzQsIG5vdCBjb21wbGV0ZWx5IGNvbXBsZXRlLAoJICBJIHdvdWxkIGxpa2UgeG1sbGludCAtLWNvcHkgLS1kZWJ1ZyB0ZXN0L2VudDEgYW5kCgkgIHhtbGxpbnQgLS1kZWJ1ZyB0ZXN0L2VudDEgdG8gc2hvdyB0aGUgc2FtZSByZXN1bHQuCgkqIHhwYXRoLmM6IGZpeCBhIGJ1ZyB3aGVuIHRyeWluZyB0byBzb3J0IG5hbWVzcGFjZSBub2RlcwoKV2VkIEFwciAyNSAxMjoyODo1NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUx0cmVlLmM6IHJlYWwgZml4IGZvciAgIzUzNDAyCgpUdWUgQXByIDI0IDE3OjM2OjM1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYyBIVE1MdHJlZS5oIDogY2xvc2luZyAjNTM0MDIgaS5lLiBvdXRwdXQgb2YKCSAgUElzIHdoZW4gdXNpbmcgeHNsOm91dHB1dAoJKiB2YWxpZC5jOiBjbG9zaW5nICM1MzUzNyBzb21lIGNhc2UgZ2VuZXJhdGUgc2VnZmF1bHRzIGlmIHRoZXJlCgkgIGlzIHZhbGlkaXR5IGVycm9ycwoKVHVlIEFwciAyNCAxNToxOTo1MyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIHRlc3REb2Nib29rLmMgRE9DQnBhcnNlci5jOiBtb3JlIHdvcmsgb24gdGhlIHN1cHBvcnQKCSAgb2YgZXh0ZXJuYWwgcGFyc2VkIGVudGl0aWVzLCBhZGRlZCAtLW5vZW50IHRvIHRlc3REb2Nib29rCgkqIHZhbGlkLmM6IEdhcnJ5IFBlbm5pbmd0b24gZm91bmQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZQoJICBhY2Nlc3MgaW4geG1sVmFsaWRhdGVFbGVtZW50Q29udGVudCgpCgpUdWUgQXByIDI0IDE0OjQxOjI1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jIDogSFRNTCBwYXJzaW5nIHN0aWxsIHN1Y2tzIC4uLiB0cnlpbmcgdG8gZGVhbAoJICB3aXRoIG1hZG5lc3MKCSogcmVzdWx0L0hUTUwvIDogdGhpcyBtb2RpZmllZCB0aGUgcmVzdWx0IG9mIHRoZSByZWdyZXNzaW9uIHRlc3RzCgkgIGEgbG90LgoKVHVlIEFwciAyNCAxNDoxMDozOCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVudGl0aWVzLmM6IHhtbEVuY29kZUVudGl0aWVzUmVlbnRyYW50IGZpeGVkIGEgZmV3IGFjY2Vzc2VzCgkgIHRvIGRvYyB3aGVyZSBpdCB3YXNuJ3QgY2hlY2tlZCBhZ2FpbnN0IE5VTEwgcmVwb3J0ZWQgYnkKCSAgSmVucyBMYWFzCgpUdWUgQXByIDI0IDEzOjIxOjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHBhcnNlci5jOiBKb25hcyBCb3Jnc3Ry9m0gcGF0Y2gsIHRoZSA8dGQ+LCBhbmQgPHRoPiBlbGVtZW50cwoJICBub3cgbWVhbnMgdGhlIGVuZCBvZiBhbnkgb3BlbiA8c3Bhbj4sPGZvbnQ+LDxhPiw8Yj4sPGk+LDx1Pi4KCk1vbiBBcHIgMjMgMTU6NDA6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBET0NCcGFyc2VyLmMgRE9DQnBhcnNlci5oIHRlc3REb2Nib29rLmMgY29uZmlndXJlLmluIE1ha2VmaWxlLmFtCgkgIHhtbHZlcnNpb24uaC5pbjogc3RhcnRlZCAocmUpaW50ZWdyYXRpbmcgdGhlIERvY0Jvb2sgU0dNTCBwYXJzZXIuCgkqIFNBWC5bY2hdOiBjbGVhbnVwIGFuZCB1cGRhdGVzIGZvciBEb2NCb29rCgkqIGRlYnVnWE1MLmMgcGFyc2VyLmggdHJlZS5bY2hdIHZhbGlkLmMgeHBhdGguYzogc21hbGwgbWFjcm8gb3IKCSAgZXggU0dNTCBpZGVudGlmaWVyIGNoYW5nZXMKCSogdmFsaWQuYzogcmVtb3ZlZCBhIHN0YXRpYyB1bnVzZWQgZnVuY3Rpb24uCgpNb24gQXByIDIzIDExOjA1OjU2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogSFRNTHRyZWUuYzogYXBwbGllZCBjaGFuZ2UgZm9yIFBhdWwgU3BvbmFnbCBvbiBzY3JpcHQgc2F2aW5nCgkqIE1ha2VmaWxlLmFtOiB0aGUgd2FybmluZyBhYm91dCBlbnRpdHkgdGl0bGUueG1sIGFyZSBub3JtYWwuCgpTdW4gQXByIDIyIDIyOjA5OjM1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiByZWxlYXNlIG9mIDIuMy43CgkqIE1ha2VmaWxlLmFtOiBmaXhpbmcgbWFrZSBkaXN0Y2hlY2sKClN1biBBcHIgMjIgMjE6Mjk6NTIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MvaHRtbC8qIGRvYy94bWwuaHRtbDogdXBkYXRlZCBhbmQgcmVnZW5lcmF0ZWQgdGhlIGRvY3MKClN1biBBcHIgMjIgMjE6MTE6NDUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgWFBvaW50ZXIgcHJvYmxlbSBpbnRyb2R1Y2VkIGluIDIuMy42CgpTdW4gQXByIDIyIDE0OjExOjU4IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCAjNTMzODggd2l0aCB0aGUgcHJvdmlkZWQgcGF0Y2gKClN1biBBcHIgMjIgMTI6MzQ6NDEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBCam9ybiBkZXRlY3RlZCBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MuIEZpeGVkCgkgIHZzdGF0ZVZQdXNoKCkKClN1biBBcHIgMjIgMTA6NDk6MjMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB4bWxYUGF0aENvbXBpbGUgdG8gZGV0ZWN0ZWQgdW5wcm9wZXJseSBlbmRlZCBleHByCgpTYXQgQXByIDIxIDE4OjI3OjUxIENFU1QgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIGxpYnhtbC5oOiBuZXcgaGVhZGVyIHVzZWQgb25seSBmb3IgdGhlIGNvbXBpbGF0aW9uIG9mIGxpYnhtbAoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyBkZWJ1Z1hNTC5jIGVuY29kaW5nLmMgZW50aXRpZXMuYwoJICBlcnJvci5jIGhhc2guYyBsaXN0LmMgbmFub2Z0cC5jIG5hbm9odHRwLmMgcGFyc2VyLmMKCSAgcGFyc2VySW50ZXJuYWxzLmMgdGVzdEhUTUwuYyB0ZXN0U0FYLmMgdGVzdFVSSS5jIHRlc3RYUGF0aC5jCgkgIHRyZWUuYyB1cmkuYyB2YWxpZC5jIHhpbmNsdWRlLmMgeGxpbmsuYyB4bWxJTy5jIHhtbGxpbnQuYwoJICB4bWxtZW1vcnkuYyB4cGF0aC5jIHhwb2ludGVyLmM6IGxpYnhtbC5oIGludGVncmF0aW9uCgkqIHRyaW8uW2NoXSB0cmlvcC5oIHN0cmlvLltjaF06IHVwZ3JhZGVkIHRvIHRoZSBsYXRlc3QgdHJpbwoJICBiYXNlbGluZSAodmVyc2lvbiAxLjIgcGx1cyBhIHNpbmdsZSBwYXRjaCkuCgkqIHhwYXRoLmMgcmVzdWx0L1hQYXRoL2V4cHIvZmxvYXRzIHRlc3QvWFBhdGgvZXhwci9mbG9hdHM6IHBhcnNlcwoJICBzY2llbnRpZmljIG5vdGF0aW9uIGZvciBudW1iZXJzLiBUZXN0cyBhZGRlZC4KCSogeHBhdGguYzogZm9ybWF0dGluZyBvZiBudW1iZXJzIGNoYW5nZWQgdG8gdXNlIHNwcmludGYKCSAgKGNvbnRyaWJ1dGlvbiBmcm9tIFdpbGxpYW0gQnJhY2spCgpTYXQgQXByIDIxIDE2OjEyOjU5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogY2xlYW51cCwgbW9yZSB1c2VmdWwgZGVidWdnaW5nCgkqIHBhcnNlckludGVybmFscy5jOiBjbGVhbnVwIHZjdHh0Lm5vZGVUYWIgKGRlKWFsbG9jYXRpb24KCSogeG1sSU8uYzogZW50aXR5IGxvYWRpbmcgaXMgcHJpbnRlZCBhcyBhbiBlcnJvciB3aGVuIHZhbGlkYXRpbmcKClNhdCBBcHIgMjEgMTI6MjU6NDkgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiBmaXhlZCB0byB2YWxpZGF0ZSB3aXRoaW4gZW50aXRpZXMKCSogdGVzdC9WQ00vdjIyLnhtbDogYWRkZWQgYSBzcGVjaWZpYyB0ZXN0Y2FzZQoKRnJpIEFwciAyMCAxNzo0NTo0NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLmM6IGZvcmdvdCBhbiBlcHNpbG9uIHRyYW5zaXRpb24gaW4gZm9yICgpKwoJKiB0ZXN0L1ZDTS92MjEueG1sIDogYWRkZWQgYSBzcGVjaWZpYyB0ZXN0IGNhc2UKCkZyaSBBcHIgMjAgMTU6NDY6MDQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB2YWxpZC5jOiByZW1vdmVkIGEgc3RhdGUgZXhwbG9zaW9uIGV4aGliaXRlZCBieSBSU1MKCSogdGVzdC92YWxpZC9yc3MueG1sIHJlc3VsdC92YWxpZC9yc3MueG1sKjogYWRkZWQgdGhlIHRlc3RjYXNlCgkgIGZyb20gYnVnICM1MTg3MgoKRnJpIEFwciAyMCAxNDo1Mjo0NCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHZhbGlkLltjaF0gdHJlZS5oOiB3b3JrZWQgKmhhcmQqIHRvIGdldCBub24tZGV0ZXJtaW5pc3QgY29udGVudAoJICB2YWxpZGF0aW9uIHdpdGhvdXQgdXNpbmcgYW4gdWdseSBORkEgLT4gREZBIGFsZ28gaW4gdGhlIHNvdXJjZS4KCSAgTWFkZSBhIHNwZWNpZmljIGFsZ29yaXRobSBlYXNpZXIgdG8gbWFpbnRhaW4sIHVzaW5nIGEgc2luZ2xlCgkgIHN0YWNrIGFuZCB3aXRob3V0IHJlY3Vyc2lvbi4KCSogTWFrZWZpbGUuYW0gdGVzdC9WQ00vKi54bWw6IGFkZGVkIG1vcmUgdGVzdHMgdG8gIm1ha2UgVmFsaWR0ZXN0cyIKCSogaGFzaC5jOiBtYWRlIHRoZSBncm93aW5nIHJvdXRpbmUgc3RhdGljCgkqIHRyZWUuaCBwYXJzZXIuYzogYWRkZWQgdGhlIHBhcmVudCBpbmZvcm1hdGlvbiB0byBhbgoJICB4bWxFbGVtZW50Q29udGVudCBub2RlLgoKV2VkIEFwciAxOCAyMzozMzoxMSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIFNBWC5jIHBhcnNlci5jIHhwYXRoLmM6IGdlbmVyYXRpbmcgSURzIHdoZW4gbm90IHZhbGlkYXRpbmcKCSAgZnJvbSBhbiBleHRlcm5hbCBwYXJzZWQgZW50aXR5IHdhcyBwb2lzb25pbmcgdGhlIElEIGhhcyB0YWJsZQoJICB3aXRoIHJlbW92ZWQgdmFsdWVzLiBUaGlzIHdhcyBraWxsaW5nIFhTTFQgb24gdGhlIEtERSBoZWxwCgkgIGJyb3dzZXIuCgpXZWQgQXByIDE4IDE3OjA5OjE1IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZW50aXRpZXMuaDogYW5kcmV3QHVnaC5uZXQuYXUgZGV0ZWN0ZWQgYSBkb3VibGUgZGVjbGFyYXRpb24KCldlZCBBcHIgMTggMTU6MDY6MzAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkZWJ1Z1hNTC5jIGhhc2guYyB0cmVlLmggdmFsaWQuYyA6IHNvbWUgY2hhbmdlcyByZWxhdGVkIHRvCgkgIHRoZSB2YWxpZGF0aW9uIHN1cG9ydCB0byBpbXByb3ZlIHNwZWVkIHdpdGggRG9jQm9vawoJKiByZXN1bHQvVkMvT25lSUQyIHJlc3VsdC9WQy9PbmVJRDMgOiB0aGlzIHNsaWdodGx5IGNoYW5nZXMKCSAgdGhlIHdheSB2YWxpZGF0aW9uIGVycm9ycyBnZXQgcmVwb3J0ZWQKCldlZCBBcHIgMTggMTE6NDI6NDcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYzogYXBwbGllZCBwYXJ0IG9mIHRoZSBwYXRjaGVzIHByb3ZpZGVkCgkgIGJ5IFAgQyBDaG93IGFuZCBXaWxsaWFtIE0uIEJyYWNrIGZvciBYU0xUIEhUTUwgb3V0cHV0CgpNb24gQXByIDE2IDE5OjQ0OjM2IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sdmVyc2lvbi5oLmluIHdpbjMyY29uZmlnLmggd2luMzIvbGlieG1sMi8qOiBhcHBsaWVkIAoJICBJZ29yIFpsYXRrb3ZpYyBwYXRjaGVzIGZvciBNU0MgY29tcGlsYXRpb24gYW5kIGFkZGVkIGhpcwoJICB1cGRhdGVzCgpUdWUgQXByIDE3IDEwOjA4OjE5IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogZml4ZWQgeG1sWFBhdGhOb2RlQ29sbGVjdEFuZFRlc3QoKSB0byBkbyBwcm9wZXIKCSAgcHJlZml4IGxvb2t1cC4KCSogcGFyc2VySW50ZXJuYWxzLmM6IGZpeGVkIHRoZSBidWcgcmVwb3J0ZWQgYnkgTW9ydXMgV2FsdGVyCgkgIGR1ZSB0byBhbiBvZmYgYnkgb25lIHR5cG8gaW4geG1sU3RyaW5nQ3VycmVudENoYXIoKQoKVGh1IEFwciAxMiAxNzo0MTowOSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYyByZXN1bHQvSFRNTC8qOiByZXZhbXBlZCB0aGUgd2F5IHRoZSBIVE1MCgkgIHBhcnNlciBoYW5kbGVzIGVuZCBvZiB0YWdzIG9yIGVuZCBvZiBpbnB1dAoKVGh1IEFwciAxMiAxMDo1MDozNCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbERvY0NvcHlOb2RlIGZvciBnZG9tZTIgc3VwcG9ydAoKV2VkIEFwciAxMSAxNjozNzo1MCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuaDogaW5jbHVkZSB4bWxtZW1vcnkuaCB0aGlzIHNlZW1zIHRvIGhhdm9pZCBhIG5hc3R5IGdsaWJjCgkgIGJ1ZyB3aGVyZSB0aGUgbGlua3RpbWUgdmVyaW9ucyBvZiBmcmVlKCkgd29uJ3Qgd29yayAuLi4KCldlZCBBcHIgMTEgMTQ6MjE6MzEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWcuaC5pbiBjb25maWd1cmUuaW4geG1sdmVyc2lvbi5oLmluOiBhZGRlZCBhbnNpZGVjbC5oIHRlc3QKCldlZCBBcHIgMTEgMTM6NTA6NDIgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IGFkZGVkIDIuMy42IHJlbGVhc2UKCldlZCBBcHIgMTEgMTM6MjY6MzQgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIHhtbFN0cmluZ0dldE5vZGVMaXN0KCkgdG8gaGFuZGxlIGNoYXJyZWZzCgkqIHJlc3VsdC93bWwueG1sOiByZXN1bHRlZCBpbiBhIHNtYWxsIG91dHB1dCBjaGFuZ2UKCldlZCBBcHIgMTEgMDk6NDc6NTUgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IHhtbE5ld0RvYyB3YXMgbWlzc2luZyB0aGUgY2hhcnNldCBpbml0aWFsaXphdGlvbgoJKiB4bWxsaW50LmM6IGFkZGVkIC0tYXV0byB0byBhdXRvZ2VuZXJhdGUgYSBkb2MsIGFsbG93IHRvCgkgIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSBmaXhlZCBvbiB4bWxOZXdEb2MKClR1ZSBBcHIgMTAgMTg6MTM6MTAgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiB0cnlpbmcgdG8gZ2V0IDUyOTc5IHNvbHZlZAoJKiB0cmVlLmMgcmVzdWx0LyByZXN1bHQvbm9lbnQvOiB0cnlpbmcgdG8gZ2V0IDUyNzEyIHNvbHZlZCwgdGhpcwoJICBhbHNvIG1hZGUgbWUgY2xlYW4gdXAgdGhlIGZhY3QgdGhhdCBYTUwgb3V0cHV0IGluIGdlbmVyYWwgc2hvdWxkCgkgIG5vdCBhZGQgZm9ybWF0aW5nIGJsYW5rcyBieSBkZWZhdWx0LCB0aGlzIGNoYW5nZWQgdGhlIG91dHB1dCBvZgoJICBhIGZldyB0ZXN0cwoKVHVlIEFwciAxMCAxNjozMDoyMCBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IEJpbGwgQnJhY2sgcG9pbnRlciBhbiBlcnJvciBpbiBkZXRlY3RpbmcgYSBudWxsIG5vZGVzZXQKClN1biBBcHIgIDggMTU6MDc6MTYgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGZpbmFsbHkgcmVsZWFzZWQgMi4zLjYKClN1biBBcHIgIDggMTE6Mzk6MjEgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBjaGVja2luZyBmb3IgbnVsbCBwb2ludGVyIGdlbmVyYXRlZCBieSBuZXcgY29kZQoKRnJpIEFwciAgNiAxMjo1MzowNSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgW10gZXZhbHVhdGlvbiBwcm9ibGVtIHJlcG9ydGVkCgkqIHRlc3QvWFBhdGgvdGVzdHMvc2ltcGxlYWRkcjogZXh0ZW5kZWQgdGVzdAoJKiByZXN1bHQvWFBhdGgvc2ltcGxlYWRkcjogdXBkYXRlZCByZXN1bHQKCldlZCBBcHIgIDQgMDI6MDc6NTMgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxsaW50LmM6IERhbiBUaW1pcyByZXBvcnRlZCBhIHBvcnRhYmlsaXR5IHByb2JsZW0KCSAgb24gTWFjcyB3aXRob3V0IG1tYXAsIGZpeGVkIGl0LgoKVHVlIEFwciAgMyAyMDoyMDo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRlc3RYUGF0aC5jIDogYWRkZWQgYSAtLXRyZWUgb3B0aW9uIGFsbG93aW5nIHRvIGRpc3BsYXkgdGhlCgkgIHRyZWUgZHVtcCBvZiB0aGUgWFBhdGggZXhwcmVzc2lvbgoKTW9uIEFwciAgMiAxNzoxMzo1MSBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbWVtbGVhayB3aGVuIGNvbXBhcmluZyBub2Rlc2V0cwoJKiBIVE1MdHJlZS5jOiBkb24ndCBpbnZlbnQgdGhlIEhUTUwgZG9jdHlwZSBpZiBub3QgYXZhaWxhYmxlIChYU0xUKQoJKiB0cmVlLmM6IGFkZGVkIGEgVE9ETwoKVHVlIE1hciAyNyAxNDozMjowNiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSBjb25maWcuaC5pbiB4bWx2ZXJzaW9uLmguaW46IGRldGVjdCBpZgoJICB3ZSBuZWVkIHN0cmluZyBmdW5jdGlvbnMKCSogdHJpby5bY2hdIHN0cmlvLltjaF06IGVtYmVkZGVkIHRoZSBUcmlvLTAuMjMgc3RyaW5nIGZ1bmN0aW9ucwoJICB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIHdoZXJlIG5lZWRlZC4gQXBwbGllZCBzb21lIGNoYW5nZXMKCSAgdG8gcmVkdWNlIG5hbWUgbGlua2luZyBwb2xsdXRpb24gYW5kIGNvbXBpbGUgaW4gb25seSB3aGF0J3MKCSAgbmVlZGVkLgoJKiBIVE1MdHJlZS5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBlcnJvci5jIG5hbm9mdHAuYyB2YWxpZC5jCgkgIHhsaW5rLmMgeG1sdmVyc2lvbi5oLmluIHhwYXRoLmM6IGdvdCByaWQgb2YgdGhlICNpZmRlZiAKCSAgZm9yIHRoZSBzdHJpbmcgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucwoJKiB4bWxtZW1vcnkuW2NoXTogcmVtb3ZlZCBERUJVR19NRU1PUllfRlJFRUQgYW5kIGFkZGVkIGl0IGF1dG9tYXRpY2FsbHkKCSAgdG8gdGhlIGZyZWUoKSBmdW5jdGlvbiBvZiB4bWxtZW1vcnkuYwoJKiBlbnRpdGllcy5jIEhUTUx0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgdHJlZS5jIHVyaS5jIHZhbGlkLmMKCSAgeGluY2x1ZGUuYyB4bWxJTy5jIHhwYXRoLmMgeHBvaW50ZXIuYzogcmVtb3ZlZCB0aGUgTUVNX0NMRUFOVVAKCSAgdXNhZ2UuCgpUdWUgTWFyIDI3IDAyOjMwOjIzIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZXJyb3IuYzogYXBwbGllZCB0aGUgY29udGV4dCBvdXRwdXQgcGF0Y2ggb2YgdGhlIGVycm9yCgkgIGhhbmRsaW5nIHN1Ym1pdHRlZCBieSBDaHVjayBHcmlmZml0aAoJKiBlcnJvci9WQy8qOiB0aGlzIHNsaWdodGx5IGNoYW5nZSBzb21lIGVycm9yIGxvZ3MKClR1ZSBNYXIgMjcgMDA6NTE6MjcgQ0VTVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4ZWQgbGluZSBudW1iZXIgcmVwb3J0aW5nIG9uIGVycm9yCgpNb24gTWFyIDI2IDIzOjIxOjQxIENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IFN1bGxpdmFuIGFuZCBEYXJpbiBmb3VuZCBhIHBhcnNlciBidWcsCgkgIGFwcGxpZWQgdGhlIHBhdGNoLgoKTW9uIE1hciAyNiAxODoyNDo1MiBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZXJyb3IuYyBwYXJzZXJJbnRlcm5hbHMuYwoJICB0ZXN0SFRNTC5jIHRlc3RTQVguYyB0cmVlLmMgdmFsaWQuYyB4bWxJTy5jIHhtbG1lbW9yeS5jCgkgIHhtbHZlcnNpb24uaC5pbiB4cG9pbnRlci5jOiBvZiBjb3Vyc2UgdGhlIHdheSBJIGRlZmluZWQKCSAgVU5VU0VEIGJyZWFrcyBvbiBvbGQgZ2NjIHZlcnNpb24uIFRyeSB0byBiZSBzbWFydCBhbmQKCSAgYWxzbyBkZWZpbmUgaXQgZGlyZWN0bHkgaW4geG1sdmVyc2lvbi5oCgkqIGNvbmZpZ3VyZS5pbjogcmVtb3ZlZCAtYW5zaSBmbGFnIGZyb20gdGhlIHBlZGFudGljIHNldAoKU2F0IE1hciAyNCAxNzo0NTozNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoJSHVnZSBjbGVhbnVwLCBJIHN3aXRjaGVkIHRvIGNvbXBpbGUgd2l0aAoJLVdhbGwgLWcgLU8gLWFuc2kgLXBlZGFudGljIC1XIC1XdW51c2VkIC1XaW1wbGljaXQKCS1XcmV0dXJuLXR5cGUgLVdzd2l0Y2ggLVdjb21tZW50IC1XdHJpZ3JhcGhzIC1XZm9ybWF0CgktV2NoYXItc3Vic2NyaXB0cyAtV3VuaW5pdGlhbGl6ZWQgLVdwYXJlbnRoZXNlcyAtV3NoYWRvdwoJLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1hbGlnbiAtV3dyaXRlLXN0cmluZ3MgLVdhZ2dyZWdhdGUtcmV0dXJuCgktV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbmVzdGVkLWV4dGVybnMgLVdpbmxpbmUKCSogSFRNTHBhcnNlci5bY2hdIEhUTUx0cmVlLmMgU0FYLmMgZGVidWdYTUwuYyBlbmNvZGluZy5bY2hdCgkgIGVuY29kaW5nLmggZW50aXRpZXMuYyBlcnJvci5jIGxpc3QuW2NoXSBuYW5vZnRwLmMKCSAgbmFub2h0dHAuYyBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuW2NoXSB0ZXN0SFRNTC5jCgkgIHRlc3RTQVguYyB0ZXN0VVJJLmMgdGVzdFhQYXRoLmMgdHJlZS5bY2hdIHVyaS5jCgkgIHZhbGlkLltjaF0geGluY2x1ZGUuYyB4bWxJTy5bY2hdIHhtbGxpbnQuYyB4bWxtZW1vcnkuYwoJICB4cGF0aC5jIHhwYXRoSW50ZXJuYWxzLmggeHBvaW50ZXIuW2NoXSBleGFtcGxlL2dqb2JyZWFkLmM6CgkgIENsZWFudXAsIHN0YXRpY2ZpZWQgYSBudW1iZXIgb2Ygbm9uLWV4cG9ydGVkIGZ1bmN0aW9ucywKCSAgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgYSBkb3plbiBvZiBwcm9ibGVtIGZvdW5kIHRoaXMgd2F5LAoJICBhdm9pZGVkIGEgbG90IG9mIHB1YmxpYyBmdW5jdGlvbiBuYW1lL3R5cGVkZWYvc3lzdGVtIG5hbWVzIGNsYXNoZXMKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkCgkqIGNvbmZpZ3VyZS5pbjogc3dpdGNoZWQgcHJpdmF0ZSBmbGFncyB0byB0aGUgcmVhbGx5IHBlZGFudGljIG9uZXMuCgpUaHUgTWFyIDIyIDIyOjQ0OjE1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IDIuMy41CgkqIGRvYy9odG1sLyo6IHJlYnVpbHQgdGhlIGRvY3MKClRodSBNYXIgMjIgMTU6MzY6NDUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCBhIHJlcG9ydGVkIGJ1ZyBpbiBOT1RBVElPTiBwYXJzaW5nCgkqIHVyaS5jOiBhY2NlcHRlZCBidXQgbm90IGZpeGVkIGJ1ZyA1MTg3NiwgYWRkZWQgVE9ETyAKCSogTWFrZWZpbGUuYW06IGZpeGVkIGJ1ZyA1MTg3NgoKVGh1IE1hciAyMiAxMzo0MToyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIGVycm9yLmM6IGZpeCBhIGNvbXBpbGF0aW9uIHByb2JsZW0KCSAgb24gcGxhdGZvcm1zIHdpdGhvdXQgdnNucHJpbnRmICh4bWxAdGhld3JpdHRlbndvcmQuY29tKQoKV2VkIE1hciAyMSAxOTowNDozNCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IGZpeGVkIGEgZnVuY3Rpb24gbmFtZSBoZWFkZXIgdHlwbwoJKiBTQVguYzogbm90YXRpb25zIGNhbiBhbHNvIG9jY3VyIGluIGV4dGVybmFsIHN1YnNldC4KClR1ZSBNYXIgMjAgMTQ6MjE6MjggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGVycm9yLmM6IHJlbW92ZWQgYSBDKysgbGlrZSBjb21tZW50CgpUdWUgTWFyIDIwIDEyOjIyOjM2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogZml4aW5nIGJ1ZyA1MjI5OSBzdHJhbmdlIGNvbmRpdGlvbiBsZWFkaW5nCgkgIHRvIGEgcGFyc2VyIGNyYXNoIGR1ZSB0byBhIGJ1ZmZlciBvdmVyZmxvdwoJKiByZXN1bHQvbm9lbnQvYXR0cmliLnhtbCByZXN1bHQvYXR0cmliLnhtbCB0ZXN0L2F0dHJpYi54bWw6CgkgIGFkZGVkIHRoZSBzcGVjaWZpYyB0ZXN0IGNhc2UKCk1vbiBNYXIgMTkgMTY6NTA6NTIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLltjaF06IHN0aWxsIGEgbG90IG9mIGNsZWFudXAgYmFzZWQgb24gWFNMVCwgYWRkZWQKCSAgeG1sWFBhdGhDb252ZXJ0e1N0cmluZyxOdW1iZXIsQm9vbGVhbn0gdG8gYmUgYWJsZSB0byBtYWtlCgkgIHR5cGUgY2FzdHMgd2l0aG91dCBhIGNvbnRleHQgc3RhY2ssIGZpeGVkIHNvbWUgaW1wbGVtZW50YXRpb24KCSAgcHJvYmxlbXMgcmVsYXRlZCB0byB0aGUgYWJzZW5jZSBvZiBjb250ZXh0IGF0IHBhcnNlLXRpbWUsCgkgIGFkZGVkIHhtbFhQYXRoRXZhbFByZWRpY2F0ZSgpIGFuZCB4bWxYUGF0aEZyZWVDb21wRXhwcigpCgkgIGluIHRoZSBwdWJsaWMgQVBJIHRvbwoJKiB4cG9pbnRlci5jIHhwYXRoSW50ZXJuYWxzLmg6IHdlIG5lZWQgdG8ga25vdyBhdCBwYXJzZSB0aW1lCgkgIHdoZXRoZXIgd2UgYXJlIGNvbXBpbGluZyBhbiBYUG9pbnRlcgoKTW9uIE1hciAxOSAxMTo1NDozMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXSB4cG9pbnRlci5jOiByZXN0YXVyZWQgdGhlIEJpbmFyeSBhbmQgQVBJIGNvbXBhdGliaWxpdHkKCSAgY2xlYW5lZCB1cCB0aGUgcGFyc2VyIGludGVybmFscywgcmVmYWN0b3JlZCBYUGF0aCBjb2RlLCBhZGRlZAoJICBuZXcgY29tcGlsYXRpb24gYmFzZWQgQVBJcyBhbmQgY2xlYW5seSBzZXBhcmF0ZWQgcHVibGljIGFuZAoJICBwcml2YXRlIEFQSXMuCgpNb24gTWFyIDE5IDAwOjU5OjI1IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5oOiB0aGUgY29tcCBmaWVsZCBtdXN0IGJlIGFkZGVkIGF0IHRoZSBlbmQgdG8gYXZvaWQKCSAga2lsbGluZyBiaW5hcnkgY29tcGF0LgoKTW9uIE1hciAxOSAwMDoxMToxOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGRldGVjdCBYUGF0aCBtZW1sZWFrcyBpbiByZWdyZXNvbiB0ZXN0cwoJKiBlcnJvci5jOiBmaXhlZCBhbmQgZXJyb3Igdy5yLnQuIGVycm9yIHJlcG9ydGluZyBzdGlsbCB1c2luZwoJICBzdGRlcnIKCSogaGFzaC5jOiBhZGRlZCBuZXcgbGluZSBhdCBlbmQgb2YgZmlsZQoJKiB0cmVlLmg6IG1pbm9yIGNsZWFudXAKCSogeHBhdGguW2NoXSB4cG9pbnRlci5bY2hdOiBNYWpvciBjaGFuZ2VzICEgU2VwYXJhdGVkIFhQYXRoCgkgIGV4cHJlc3Npb24gcGFyc2luZyBmcm9tIGV2YWx1YXRpb24sIHJlc3VsdGVkIGluIGEgbnVtYmVyIG9mCgkgIGNoYW5nZXMgaW50ZXJuYWxseSwgYW5kIGluIFhQb2ludGVyLiBMaWtlbHkgdG8gYnJlYWsgc3R1ZmYKCSAgdXNpbmcgeHBhdGhJbnRlcm5hbHMuaCBidXQgc2hvdWxkIHJlbWFpbiBiaW5hcnkgY29tcGF0aWJsZSwKCSAgbmV3IGludGVyZmFjZXMgd2lsbCBiZSBhZGRlZC4KCldlZCBNYXIgMTQgMjA6MzQ6MDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogZml4ZWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMgcmVwb3J0ZWQgYnkgCgkgIG9raWRkbGVAeWFob28uY28udWsgYW5kIGFsbGFuY0BjaGlja2VuYW5kcG9ybi5jb20gd2hlbiBjb21waWxpbmcKCSAgd2l0aG91dCBnY2Mgb24gbm9uIGxpbnV4IHBsYXRmb3Jtcy4KCldlZCBNYXIgMTQgMjA6MTM6NTQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy9NYWtlZmlsZS5hbSBjb25maWd1cmUuaW46IHllYXJrZUBlbmcuYnVmZmFsby5lZHUgc3VnZ2VzdGVkCgkgIGEgZml4IGZvciAtLXdpdGgtaHRtbC1kaXI9IGNvbmZpZ3VyZSBzdXBwb3J0LiBJIGhvcGUgaXQgd29uJ3QKCSAgYnJlYWsgcnBtIGdlbmVyYXRpb24KCldlZCBNYXIgMTQgMTc6Mjg6NDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbElPLmM6IG9uZSBmdW5jdGlvbiBjb21tZW50IGNsZWFudXAuCgpXZWQgTWFyIDE0IDE0OjU1OjQ2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBTQVguYzogZXh0ZXJuYWwgc3Vic2V0IG5vdGF0aW9ucyB3ZXJlIGltcHJvcGVybHkgcmVnaXN0ZXJlZAoJICBpbiB0aGUgaW50ZXJuYWwgc3Vic2V0LgoKVHVlIE1hciAxMyAxMDoyODo0OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogUkVBRE1FLmN2cy1jb21taXRzOiBhZGRlZCwgcG9pbnRpbmcgdG8gSEFDS0lORwoJKiBIQUNLSU5HOiB1cGRhdGVkCgpNb24gTWFyIDEyIDIyOjA5OjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogYW5kIE1hdHQgU2VyZ2VhbnQgZm91bmQgb25lIGluIHRoZSBYTUwgcHVzaAoJICBwYXJzZXIgKGVycm9uZW91cyBjaGVjayBJIGZvcmdvdCB0byByZW1vdmUgd2hlbiBJIGZpeGVkIHRoZQoJICBtYWluIHBhcnNlcikuCgpNb24gTWFyIDEyIDE5OjE5OjA0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBwdGl0dG9tIGZvdW5kIGEgc21hbGwgYnVnIGluIFVuYXJ5RXhwcgoKU2F0IE1hciAxMCAxMzowOTo1MyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBidW1wZWQgdG8gMi4zLjQKCSogZXJyb3IuYzogZml4ZWQgYnVnICM1MTg2MAoJKiB0cmVlLmM6IGZpeGVkIGJ1ZyAjNTE4NjEKCSogdmFsaWQuYzogY2xlYW51cCwgbW9yZSBkZWJ1ZywgZmFpbGVkIHRvIGZpeCBvbmUgYnVnIGNyYXAgLi4uCgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbERlZmF1bHRCdWZmZXJTaXplCgkqIG5hbm9mdHAuYzogdHlwbyBpbiBmdW5jdGlvbiBuYW1lIGhlYWRlciBibG9jawoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkLCBhZGRlZCBsaW5rIHRvIFhNTDo6TGliWFNMVAoJKiBkb2MvaHRtbC8qIDogcmVidWlsdCB0aGUgZG9jcwoKV2VkIE1hciAgNyAyMDo0Mzo0NyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmMgU0FYLmM6IHRoZSBuZXcgY29udGVudCBwYXJzaW5nIGNvZGUgcmFpc2VkIGFuCgkgIHVnbHkgYnVnIGluIHRoZSBjaGFyYWN0ZXJzKCkgU0FYIGNhbGxiYWNrLiBGb3VuZCBpdAoJICBqdXN0IGJlY2F1c2Ugb2Ygc3RyYW5nZW5lc3MgaW4gWFNMVCBYTUwgUmVjIG91cHR1dCA6LSgKCldlZCBNYXIgIDcgMTY6NTA6MjIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtOiBNYXJ0aW4gQmF1bGlnIHN1Z2dlc3RlZCB0byBhZGQgLWxtCgkqIHRyZWUuYzogZm91bmQgYW5vdGhlciBidWcgaW4geG1sTm9kZUdldENvbnRlbnQoKQoKVHVlIE1hciAgNiAwOToyMTozMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogQmpvcm4gZm91bmQgdGhlIGVycm9yIHJlbGF0ZWQgdG8gc3RyaWN0bmVzcyBvZiBjb21wYXJpc29uLgoKTW9uIE1hciAgNSAyMTo0NzozMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogcGFyc2VyLmM6IHRyeWluZyB0byBmaXggdGhlIER0ZCBwYXJzaW5nIHByb2JsZW0gcmVwb3J0ZWQKCSAgYnkgR2FyeSwgc2lkZSBlZmZlY3Qgb2YgbGFzdCB3ZWVrIHNwZWVkIG9wdGltaXphdGlvbnMuCgpTYXQgTWFyICAzIDE5OjQ1OjU5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWwyQ29uZi5zaC5pbjogZml4ZXMgcG9pbnRlZCBvdXQgYnkgRnJlZHJpayBIYWxsZW5iZXJnCgkqIHBhcnNlckludGVybmFscy5jOiByZW1vdmVkIHVubmVlZGVkIHRlc3QgcmFpc2VkIGJ5IFN0cmljCgpTYXQgTWFyICAzIDEzOjA0OjM3IENFVCAyMDAxIEJqb3JuIFJlZXNlIDxicmVlc2VAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoKCSogeHBhdGguYzogRml4ZWQgeG1sWFBhdGhOb2RlQ29sbGVjdEFuZFRlc3QgKHByb2JsZW0gcmVwb3J0ZWQKCSAgYW5kIGZpeGVkIGJ5IFdpbGxpYW0gQnJhY2spLiBBZGRlZCB4bWxYUGF0aEZvcm1hdE51bWJlci4KCSAgQ2hhbmdlZCB0aGUgc29ydGluZyBzbGlnaHRseS4KCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtIGV4YW1wbGUvTWFrZWZpbGUuYW06IEFkZGVkIC1sbS4KCSAgUGxlYXNlIG5vdGUgdGhhdCBhcHBsaWNhdGlvbnMgbGlua2luZyB3aXRoIGxpYnhtbDIsIG11c3QKCSAgYWxzbyBsaWtlIHdpdGggdGhlIG1hdGggbGlicmFyeSBmcm9tIG5vdyBvbi4KClNhdCBNYXIgIDMgMDc6Mzg6NTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgbG9vcCByZXBvcnRlZCBieSBNYXJjIFNhbmZhY29uCgpTYXQgTWFyICAzIDAyOjEwOjI0IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogb25lIG11c3QgcmVwb3J0IHNwYWNlcyBldmVuIGlmIHRoZSBEdGQgZWxlbWVudAoJICBjb250ZW50IHByb3ZlcyB0aGF0IHRoaXMgaXMgbm90IHBhcnQgb2YgdGhlIGVsZW1lbnQgY29udGVudC4KCSogcmVzdWx0L3ZhbGlkLyoueG1sOiB0aGlzIGNoYW5nZWQgdGhlIG91cHR1IHNsaWdodGx5CgpUaHUgTWFyICAxIDE3OjUzOjM5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjMuMwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQKCldlZCBGZWIgMjggMDA6NDM6NTggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuYzogbWlub3IgZG9jIGZpeAoJKiB4cGF0aC5jOiBkZWFsbG9jYXRpb24gaXNzdWVzIHdoZW4gYSByZXN1bHQgdHJlZSBoYXMgYmVlbgoJICBjb252ZXJ0ZWQgdG8gYSBub2RlLXNldAoKTW9uIEZlYiAyNiAyMjowOTo0NSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL3htbC5odG1sOiBvb3BzIGNvcnJlY3RlZCBkYXRlcyBzLzIwMDAvMjAwMQoKTW9uIEZlYiAyNiAxMjo0ODozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogbmV3IHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uCgpNb24gRmViIDI2IDA5OjMwOjIzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBkb2MveG1sLmh0bWw6IGFwcGxpZWQgcGF0Y2ggZnJvbSBBbmtoCgpNb24gRmViIDI2IDAzOjM0OjQzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4aW5jbHVkZS5jOiBmaXhlZCBhIHByb2JsZW0gYnVpbGRpbmcgb24gTWFjCgpTdW4gRmViIDI1IDIxOjUyOjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBwYXJzZXIuYzogbW9yZSB3b3JrIG9uIGluY3JlYXNpbmcgcGFyc2luZyBmZXJmb3JtYW5jZXMKClN1biBGZWIgMjUgMTg6MDM6NDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbG1lbW9yeS5oIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIGVudGl0aWVzLmMgcGFyc2VyLmMKCSAgeHBhdGguYyB4cG9pbnRlci5jIHRyZWUuYyB1cmkuYyB2YWxpZC5jIHhpbmNsdWRlLmMgeG1sSU8uYzoKCSAgYXZvaWRpbmcgbWVtY3B5IGluIHByb2R1Y3Rpb24gYnVpbGRzIE1FTV9DTEVBTlVQIG1hY3JvIHVzZQoJKiBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuYzogb3B0aW1pemF0aW9ucyBvZiB0aGUgdGlnaHRlc3QKCSAgaW50ZXJuYWwgbG9vcHMgaW5zaWRlIHRoZSBwYXJzZXIuIEJldHRlciBjaGVja2luZyBvZiBJL08KCSAgZmx1c2hpbmcvbG9hZGluZyBjb25kaXRpb25zCgkqIHhtbGxpbnQuYyA6IGFkZGVkIC0tdGltaW5nCgpTdW4gRmViIDI1IDA1OjQ4OjUxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IGJ1bXBlZCB0byAyLjMuMgoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZWQgZm9yIHJlbGVhc2UKClNhdCBGZWIgMjQgMTQ6MDc6NTIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZvdW5kIGEgbWVtbGVhayBhbmQgZml4ZWQgYSBuYXN0eSBidWcKClNhdCBGZWIgMjQgMDM6MzU6NDggQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhtbGxpbnQuW2MxXSA6IGFkZGVkIHJldHVybiBjb2RlIGVycm9ycyBmb3IgeG1sbGludAoJKiB4cGF0aC5jOiBzcGVjaWZpYyBkZWJ1ZyBkdW1wIGZ1bmN0aW9uIGZvciByZXN1bHQgdmFsdWUgdHJlZXMKClRodSBGZWIgMjIgMDc6NTI6MjcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpbmFsbHkgaW1wbGVtZW50ZWQgeG1sWFBhdGhDb21wYXJlTm9kZVNldHMKCSogdGVzdC9YUGF0aC9leHByL2Zsb2F0cyByZXN1bHRzL1hQYXRoL2V4cHIvZmxvYXRzOiBhZGRlZCAKCSAgYSB0ZXN0IGZvciBmbG9hdCBleHByZXNzaW9ucwoKVHVlIEZlYiAyMCAxODo1Nzo1NCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxOb2RlR2V0Q29udGVudCwgaXQgd2FzIG5vdCByZWN1cnNpbmcgb24gY2hpbGQKCSogcGFyc2VySW50ZXJuYWxzLltjaF06IHRyeWluZyB0byBzcGVlZCB1cCBwYXJzaW5nCgkqIHhwYXRoLmMgOiBzcGVlZGVkIHVwIG5vZGUgc2V0IGVxdWFsaXR5IG9wCgpNb24gRmViIDE5IDE5OjAxOjU3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbSB2YWxpZC5jIGxpc3QuW2NoXTogR2FyeSBQZW5uaW5ndG9uIHByb3ZpZGVkIGEKCSAgYmV0dGVyIGhhbmRsaW5nIG9mIElEL0lEUkVGIGFuZCB0aGUgbGlzdCBtb2R1bGVzIGFzc29jaWF0ZWQKCSogY29uZmlndXJlLmluOiBzbWFsbCBDRkxBR1MgY2xlYW51cAoKTW9uIEZlYiAxOSAxNjoxMzoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCBpY29udiBkZXRlY3Rpb24gb24gQUlYIChzdHJpYykKCk1vbiBGZWIgMTkgMTA6NTk6NDEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkICIqIiAodW5iZWxpZXZhYmxlICEpIGFuZCBhIGNvdXBsZSBvZiB3YXJuaW5ncwoKU3VuIEZlYiAxOCAxNzo1MjozNyBNRVQgMjAwMSBCam9ybiBSZWVzZSA8YnJlZXNlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCgkqIHhwYXRoLmM6IGZpeGVkIHdoaXRlc3BhY2UgaGFuZGxpbmcgaW4geG1sWFBhdGhTdHJpbmdFdmFsTnVtYmVyLAoJICBhbmQgb3B0aW1pemVkIHhtbFhQYXRoTm9kZVNldFNvcnQKClNhdCBGZWIgMTcgMTQ6MTg6NDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGJ1ZyBmaXggd2hlbiBjb250ZXh0IHNpemUgaXMgMAoJKiBwYXJzZXIuYzogSSBsaWtlIE5vcm0ncyBEdGQgYmVjYXVzZSB0aGV5IHN0aWxsIG1hbmFnZSB0byBicmVhawoJICB0aGUgcGFyc2VyIG9jY2FzaW9uYWxseQoKRnJpIEZlYiAxNiAxNDoyMDozNSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogeG1sWFBhdGhFcXVhbE5vZGVTZXRGbG9hdCB0aGUgYXJnIGlzIHJlYWxseSBhIGRvdWJsZSBub3cKCkZyaSBGZWIgMTYgMDE6MTA6MDYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHRyZWUuW2NoXSBwYXJzZXIuYyB4cGF0aC5jOiBmaXhlZCB0aGUgcHJvYmxlbSBvZiBhZGRyZXNzaW5nCgkgIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBYTUwtMS4wIG5hbWVzcGFjZQoKVGh1IEZlYiAxNSAxNjo1MzoyMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGhJbnRlcm5hbHMuaDogZXhwb3J0ZWQgYSBmZXcgYXhpcyBmdW5jdGlvbnMKCSogZG9jL3htbC5odG1sOiB1cGRhdGVkIHRoZSBkb2MKClRodSBGZWIgMTUgMTU6NTc6MTQgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGNvbmZpZ3VyZS5pbjogYXBwbGllZCBwYXRjaCBmcm9tIERhbmllbCB2YW4gQmFsZW4gZm9yIE9wZW5CU0QKCSAgYW5kIGJ1bXBlZCB2ZXJzaW9uIHRvIDIuMy4xCgkqIEhUTUx0cmVlLmMgcmVzdWx0L0hUTUwvZG9jMy5odG0gcmVzdWx0L0hUTUwvd2lyZWQuaHRtbDogdGhlCgkgIGF0dGVtcHQgdG8gZmluZCBhdXRvY2xvc2luZyB3YXMgc2ltcGx5IGJyb2tlbiwgcmVtb3ZlZCBpdCwKCSAgdXBkYXRlZCB0aGUgZXhhbXBsZXMsIHRoaXMgaXMgYmV0dGVyCgpXZWQgRmViIDE0IDExOjM1OjM5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBoYXNoLltjaF06IGFkZGVkIFBhb2xvIENhc2FyaW5pIHBhdGNoIHRvIHByb3ZpZGUgRGVsZXRlIGZyb20KCSAgaGFzaCBmdW5jdGlvbm5hbGl0aWVzLgoJKiBkb2MvaHRtbC8qIDogcmVidWlsZCB0aGUgZG9jCgpUdWUgRmViIDEzIDE4OjAxOjQ4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jIHJlc3VsdC9YUGF0aC90ZXN0cy9jaGFwdGVyc3ByZWZvbDogYnVnZml4ZXMgb24gb3JkZXIgYW5kCgkgIG9uIHByZWRpY2F0ZQoJKiBIVE1McGFyc2VyLltjaF0gSFRNTHRyZWUuYyByZXN1bHQvSFRNTC9kb2MzLmh0bS5lcnIKCSAgcmVzdWx0L0hUTUwvZG9jMy5odG0uc2F4IHJlc3VsdC9IVE1ML3dpcmVkLmh0bWw6IHNvbWV0aW1lcyBvbmUKCSAgcmVhbGx5IHdhbnQgdG8gaGF2ZSB0YWdzIGNsb3NlZCBvbiBvdXRwdXQgZXZlbiBpZiB3ZSBhY2NlcHQKCSAgdW5jbG9zZWQgb25lcyBvbiBpbnB1dAoKTW9uIEZlYiAxMiAxODozMzoyMCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogb3VjaCBkb24ndCBmcmVlIE5VTEwsIHJhcmUgY2FzZSBmaXhlZAoJKiB0cmVlLmM6IGRvbid0IGNvYWxlc2NlIHRleHQgbm9kZXMgaWYgdGhleSBkb24ndCBoYXZlIHRoZQoJICBzYW1lIGJlaGF2aW91ciB3cnQgZXNjYXBpbmcgb24gb3V0cHV0CgpTdW4gRmViIDExIDIxOjE1OjQxIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBzbWFsbCBmaXh1cAoJKiBTQVguYzogZG9uJ3Qgd2FybiBvbiBlbXB0eSBuYW1lc3BhY2VzLgoKVGh1IEZlYiAgOCAxMToyODo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogUkVBRE1FOiBhIGJpdCBvZiBjbGVhbnVwCgkqIGNvbmZpZ3VyZS5pbjogcHJlcGFyaW5nIGZvciAyLjMuMCByZWxlYXNlCgpUaHUgRmViICA4IDEwOjM3OjAwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBoYXNoLltjaF06IGFkZGVkIGEgZmlyc3QgdmVyc2lvbiBvZiB4bWxIYXNoU2l6ZSgpCgkqIHZhbGlkLmM6IGFub3RoZXIgYnVnIGZpeCBmcm9tIEdhcnkgUGVubmluZ3RvbgoKV2VkIEZlYiAgNyAxOToyMjozNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdmFsaWQuYzogY291cGxlIG9mIGJ1ZyBmaXhlcyBwb2ludGVkIGJ5IEdhcnkgUGVubmluZ3RvbgoJKiBIVE1MdHJlZS5jOiAjaWYgMCBjbGVhbnVwCgpUdWUgRmViICA2IDE0OjAyOjU2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBzdGFydGVkIHByb2ZpbGluZyBYU0xULCBhZGRlZCB4bWxYUGF0aE5vZGVTZXRBZGRVbmlxdWUoKQoJICB3aGljaCByZW1vdmVzIGEgdGltZSBjb25zdW1pbmcgY2hlY2sgb2YgeG1sWFBhdGhOb2RlU2V0QWRkKCkKCSAgYW5kIHVzZSBpdCBpbiBwbGFjZXMgd2hlcmUgd2UgYXJlIHN1cmUgdG8gbm90IGJyZWFrIHVuaWNpdHkKCk1vbiBGZWIgIDUgMTg6NTE6MzYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGJ1ZyBmaXhlcyBmb3VuZCBmcm9tIFhTTFQKCSogdHJlZS5jOiBwcmVzZXJ2ZSBub2RlLT5uYW1lIHNwZWNpYWwgdmFsdWVzIHdoZW4gY29weWluZyBub2Rlcy4KCSogcGFyc2VySW50ZXJuYWxzLltjaF0gcGFyc2VyLltjaF0gU0FYLmMgOiBhZGRlZCBhIG1vZGUgd2hlcmUKCSAgZXh0ZXJuYWwgc3Vic2V0IGFyZSBmZXRjaGVkIHdoZW4gYXZhaWxhYmxlIGJ1dCB3aXRob3V0IGZ1bGwKCSAgdmFsaWRhdGlvbi4gQWRkZWQgeG1sTG9hZEV4dER0ZERlZmF1bHRWYWx1ZSwgbmVlZCBhIGZ1bmN0aW9uLgoJKiBIVE1MdHJlZS5jOiBhZGQgc3VwcG9ydCBmb3IgeG1sU3RyaW5nVGV4dE5vZW5jIGZvciBYU0x0IEhUTUwKCSAgb3V0cHV0IHdpdGggZW5jb2RpbmcgZGlzYWJsZWQuCgpTYXQgRmViICAzIDA5OjUwOjI5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxpTy5jOiBIYXJyeSBCbHVuZGVsbCBwb2ludGVkIG91dCB0aGF0IHhtbENoZWNrRmlsZW5hbWUKCSAgeG1sQ2hlY2tGaWxlbmFtZSBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIHhtbEZpbGVPcGVuVwoJICBhbmQgeG1sR3pmaWxlT3BlblcKCkZyaSBGZWIgIDIgMTg6MDQ6MzUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHVyaS5jOiByZXdyaXRlIG9mIHhtbE5vcm1hbGl6ZVVSSVBhdGggZnJvbSBQYXVsIEQuIFNtaXRoCgkqIHRlc3QvVVJJL3NtaXRoLnVyaSByZXN1bHQvVVJJL3NtaXRoLnVyaSBNYWtlZmlsZS5hbToKCSAgYWRkZWQgdGhlIG5ldyB0ZXN0cyBmb3IgVVJJIG5vcm1hbGl6YXRpb24KCSogdGVzdFVSSS5jOiBmaXhlZCBzdG9vcGlkIGJ1Z3MKCSogcmVzdWx0L1ZDL09uZUlEMyByZXN1bHQvVkMvVW5pcXVlRWxlbWVudFR5cGVEZWNsYXJhdGlvbjoKCSAgdGhlIFVSSSBpbiB0aGUgZXJyb3IgbWVzc2FnZXMgYXJlIG5vdyBwcm9wZXJseSBub3JtYWxpemVkCgpGcmkgRmViICAyIDA5OjE4OjUzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB1cmkuYzogYXBwbGllZCBNYXJjIFNhbmZhY29uJ3MgcGF0Y2ggZm9yIHhtbE5vcm1hbGl6ZVVSSVBhdGgKClRodSBGZWIgIDEgMDU6Mjg6NTUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IGZpeGVkIGEgbnVtYmVyIG9mIHByb2JsZW1zIGluIFhQQVRIX1hTTFRfVFJFRSBwcm9jZXNzaW5nCgpXZWQgSmFuIDMxIDIxOjQ1OjM3IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCBtb2Qgb3BlcmF0b3IKCldlZCBKYW4gMzEgMTY6NTA6NDIgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jOiBmaXhlZCB4bWxTdHJjYXQgZG9jCgkqIHRyZWUuYzogMiBmaXhlcyBmb3JtIEFuZGVycyBDYXJsc29uIGZvciBjb3B5aW5nIG5vZGVzIGFuZAoJICB0cmVlcy4KCldlZCBKYW4gMzEgMTQ6MTk6MTYgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmMgcmVzdWx0L1hQYXRoL3Rlc3RzL2NoYXB0ZXJzYmFzZQoJICByZXN1bHQvWFBhdGgvdGVzdHMvc2ltcGxlYmFzZTogZml4ZWQgWFBhdGggbm9kZSgpIAoJKiB0cmVlLmM6IHNtYWxsIGZpeCBpbiB4bWxOZXdOcygpCgkqIE1ha2VmaWxlLmFtOiByZW1vdmVkIGV4dHJhbmVvdXMgeG1sMkNvbmYuc2ggcnVsZQoKU3VuIEphbiAyOCAwODozNzowMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGxpYnhtbC5zcGVjLmluIGV4YW1wbGUvTWFrZWZpbGUuYW06CgkgIENoYW5nZWQgdGhlIGxpYnJhcnkgbmFtZSwgaW4gb3JkZXIgdG8gZ2V0IGxpYnhtbC1kZXZlbCBhbmQKCSAgbGlieG1sMi1kZXZlbCB0byBjb2V4aXN0IG9uIGEgc2luZ2xlIHN5c3RlbQoJKiB4bWwtY29uZmlnLjEgeG1sLWNvbmZpZy5pbiB4bWxDb25mLnNoLmluOiByZW5hbWVkCgkqIHhtbDItY29uZmlnLjEgeG1sMi1jb25maWcuaW4geG1sMkNvbmYuc2guaW46IG5ldyBmaWxlcwoKU2F0IEphbiAyNyAxOTo1ODoyMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gY29uZmlndXJlLmluIGxpYnhtbC0yLjAucGMuaW46IHN0YXJ0ZWQgd29ya2luZyBvbiBnZXR0aW5nCgkgIGxpYnhtbDItZGV2ZWwgaW5zdGFsbGFibGUgaW4gLy8gYXMgbGlieG1sLWRldmVsLgoKU2F0IEphbiAyNyAxODo0OTowMiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogZG9jL01ha2VmaWxlLmFtOiBmaXhlZCBtYWtlIHJlYnVpbGQgaW4gZG9jCgkqIGRvYy9odG1sLyouaHRtbDogcmVidWlsdCB0aGUgZG9jcwoKRnJpIEphbiAyNiAxMDozMDo1OCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdHJlZS5jOiBwYXRjaCBmcm9tIEJqb3JuIFJlZXNlIG9uIHhtbEJ1ZmZlckNDYXQKClRodSBKYW4gMjUgMTk6MjI6MjUgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIE1ha2VmaWxlLmFtIGRvYy9NYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogcGFpbmZ1bCB3b3JrIHRvIGdldAoJICB0aGUgSFRNTCBkb2MgdG8gZ28gaW50byB0aGUgLWRldmVsIFJQTSAuLi4KCSogYWNsb2NhbC5tNCBjb25maWcuaC5pbjogc29tZSB1cGRhdGVzIGR1ZSB0byBhdXRvKiBtYWdpYwoKVGh1IEphbiAyNSAxOToxMTo0OSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguaDogYWRkZWQgYSBob29rIGluIHRoZSBjb250ZXh0IHN0cnVjdHVyZSBhbGxvd2luZyB0bwoJICBsaW5rIHRvIGV4dHJhIHN1cHBvcnQsIG5lZWRlZCBmb3IgWFNMVAoKVGh1IEphbiAyNSAxMzozNDoxMSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXSB4cG9pbnRlci5jOiBhZGRlZCB4bWxYUGF0aENtcE5vZGVzLCBjaGFuZ2VkCgkgIHhtbFhQdHJDbXBQb2ludHMgdG8gdXNlIGl0LgoJKiBwcm9wYWdhdGVkIHRoZSBmb2xsb3dpbmcgcGF0Y2ggZnJvbSBBbGVqYW5kcm8gRm9yZXJvCgkqIGluY2x1ZGUvd2luMzJjb25maWcuaCB4bWxJTy5jOiBhcHBsaWVkIGZ1cnRoZXIgc3VnZ2VzdGlvbnMKCSAgZnJvbSBJZ29yIFpsYXRrb3ZpYyA8aWdvcnpAZGlhbHVwLm5hY2FtYXIuZGU+IGFuZCBjbGVhbnVwCgkqIGV4YW1wbGUvZ2pvYnJlYWQuYzogZml4ZWQgd2FybmluZ3MsIG5vdyB0aGF0IGl0IGJ1aWxkcwoKV2VkIEphbiAyNCAyMDoyNzoyOCBDT1QgMjAwMSBBbGVqYW5kcm8gRm9yZXJvIDxiYWNodWVAYmFjaHVlLmNvbT4KCgkqIHhtbElPLmMgKHhtbEZpbGVPcGVuLCB4bWxGaWxlT3BlblcpOiBSZW1vdmVkIHVubmVjZXNhcnkgY2hlY2tzLgoKCSogeG1sSU8uYyAoeG1sQ2hlY2tGaWxlbmFtZSk6IEZ1bmN0aW9uIGFkZGVkIHRvIGtub3cgd2hldGhlciBhIGdpdmVuCgkgIGZpbGVuYW1lIHBvaW50cyB0byBhIHZhbGlkIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkuCgkqIHhtbElPLmMgKHhtbEZpbGVPcGVuLCB4bWxGaWxlT3BlblcsIHhtbEd6ZmlsZU9wZW4sIHhtbEd6ZmlsZU9wZW5XKToKCSAgQWRkZWQgY2FsbHMgdG8geG1sQ2hlY2tGaWxlbmFtZURpci4KCgkqIHhtbElPLmMgKHhtbEd6ZmlsZU9wZW4sIHhtbEd6ZmlsZU9wZW5XLCB4bWxGZE9wZW4sIHhtbEZkT3BlblcpOiBQYXNzCgkgIGBwYXRoJyAocmF0aGVyIHRoYW4gYGZpbGVuYW1lJykgYXMgdGhlIHBhcmFtZXRlciB0byBnem9wZW4gYW5kIG9wZW4uCgpUdWUgSmFuIDIzIDE2OjI2OjMwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBNYWtlZmlsZS5hbTogZml4ZWQgYSBwcm9ibGVtIHdpdGggRVhUUkFfRElTVAoKTW9uIEphbiAyMiAyMzo0MjoxNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW0gZXhhbXBsZS9NYWtlZmlsZS5hbTogZmluYWxseSBmb3VuZCB0aGUgdHJpY2sKCSAgdG8gYnVpbGQgdGhlIGV4YW1wbGUsIGkuZS4gYWRkICIuIiBpbiBTVUJESVJTIGJlZm9yZSBleGFtcGxlCgkgIGluIHRoZSBsaXN0IDxncmluLz4KCk1vbiBKYW4gMjIgMTY6MzA6MzcgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCB3aXRoIGFuIFhTTFQgc2VjdGlvbiwgcmVtb3ZlZCBwb2ludGVyIHRvCgkgIFczQyBDVlMgYmFzZS4KCk1vbiBKYW4gMjIgMTE6NDM6MjEgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHhwYXRoLmM6IHdoZW4gY29weWluZyBhIFhTTFQgdHJlZSBvYmplY3QgdGVoIHRyZWUgbmVlZCB0byBiZSBjb3BpZWQKCSAgdG9vLCBhbmQgZGVhbGxvY2F0aW9uIG5lZWQgdG8gb2NjdXIgdGhlIHNhbWUgd2F5LgoKTW9uIEphbiAyMiAxMDozNTo0MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGhJbnRlcm5hbHMuaCB4cGF0aC5bY2hdIGRlYnVnWE1MLmM6IGFkZGVkIHRoZSBYUEFUSF9YU0xUX1RSRUUKCSAgdHlwZSBjb3JyZXBvbmRpbmcgdG8gYW4gWFNMVCByZXN1bHQgdHJlZSBmcmFnbWVudC4gU2hhcmUgbW9zdAoJICBvZiB0aGUgZGF0YSBmb3JtYXQgd2l0aCBub2RlIHNldCwgYXMgd2VsbCBhcyBvcGVyYXRvcnMuCgkqIEhUTUx0cmVlLmM6IGFkZGVkIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBkb2N0eXBlIG91dHB1dAoJICB3aGUgdGhpcyBvbmUgaXMgbm90IHByZXNlbnQgaW5pdGlhbGx5LgoJKiB0cmVlLmM6IG1ha2Ugc3VyZSB0YWh0IHRoZSBwYXJlbnQgYW5kIGRvYyBwb2ludGVycyBhcmUgcHJvcGVybHkKCSAgc2V0IHdoZW4gY29weWluZyBhdHRyaWJ1dGVzIChsaXN0cykuCgpTdW4gSmFuIDIxIDEwOjQ3OjM4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBodG1sVHJlZS5bY2hdIHhtbElPLmg6IGV4cG9ydGVkIGh0bWxEb2NDb250ZW50RHVtcE91dHB1dAoKRnJpIEphbiAxOSAxODoxNTo1MCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguYzogc2VlbXMgSSBmaW5hbGx5IGtpbGxlZCB0aGF0IHVnbHkgcGF0aCBldmFsdWF0aW9uCgkgIGNvbnRleHQgYnVnICh0YWdnZWQgOTk5OSBpbiBjYXNlIGlzIGlzIHdyb25nKQoKRnJpIEphbiAxOSAwNjozMDozOCBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeHBhdGguW2NoXSB4cGF0aEludGVybmFscy5oOiBhZGRlZCB4bWxYUGF0aFJlZ2lzdGVyVmFyaWFibGVMb29rdXAoKQoJICBmb3IgWFNMVAoKVGh1IEphbiAxOCAxNjoxOTo0NyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sSU8uYzogR2FyeSBQZW5uaW5ndG9uIDxHYXJ5LlBlbm5pbmd0b25AdWsuc3VuLmNvbT4gZml4CgkgIGZvciB4bWxHemZpbGVPcGVuKCkgYnVnCgpUaHUgSmFuIDE4IDEzOjExOjUwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiByZW1vdmVkIGFuIGVycm9yIGZvdW5kIGJ5IFhTTFQgdXNhZ2UKCSogdHJlZS5jIHBhcnNlckludGVybmFscy5oOiB1c2UgYSBwcmVkZWZpbmVkIHN0YXRpYyBzdHJpbmcKCSAgZm9yIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMsIGF2b2lkIGZyZWVpbmcgdGhlbSBpbiB4bWxGcmVlTm9kZSwKCSAgZXhwb3J0ZWQgdGhlIHN0cmluZyBuYW1lIGluIHBhcnNlckludGVybmFscy5oIGFuZCBhZGRlZAoJICBhbm90aGVyIHZhbHVlIHRvIGRpc2FibGUgZW5jb2RpbmcgYXQgb3V0cHV0IChmb3IgWFNMVCksCgkgIGdhaW4gbWVtb3J5LCB0aW1lLgoKV2VkIEphbiAxNyAwOToxNToxNiBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogd2luMzIvUkVBRE1FLk1TRGV2IHdpbjMyL2xpYnhtbDIvbGlieG1sMl9hLmRzcAoJICB3aW4zMi9saWJ4bWwyL2xpYnhtbDJfc28uZHNwOiBuZXcgbWFrZWZpbGVzIGFuZCB1cGRhdGUKCSAgcHJvdmlkZWQgYnkgSWdvciBabGF0a292aWMgPGlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGU+CgpUdWUgSmFuIDE2IDE4OjI0OjQ2IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmMgOiB4bWxTYXZlRmlsZSwgeG1sU2F2ZUZpbGVFbmMsIGFwcGxpZWQgcGF0Y2ggZnJvbSAKCSAgR2FyeSBQZW5uaW5ndG9uCgpNb24gSmFuIDE1IDIwOjI0OjE4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4cGF0aC5jOiBmaXhlZCB0aGUgY29tYXByaXNpb24gb2YgdmFsdWVzIGFuZCBub2RlbGlzdHMsCgkgIG5lZWQgdG8gY29tcGFyZSBub2RlbGlzdCBzdGlsbCAuLi4KCSogZGVidWdYTUwuYzogYXZvaWRlZCBhIHBvc3NpYmxlIGNvcmUgZHVtcAoJKiBIVE1McGFyc2VyLmM6IGNsZWFudXAKCSogbmFub2h0dHAuYzogY29udHJpYnV0ZWQgZml4LgoJKiB0cmVlLmM6IGZpeGVzIGluIHByb3BlcnRpZXMgaGFuZGxpbmcgYWRkZWQgeG1sU2V0TnNQcm9wCgkgIG5lZWRlZCBieSBsaWJ4c2x0CgkqIHhwYXRoSW50ZXJuYWxzLmg6IGV4cG9ydGVkIHhtbFhQYXRoQm9vbGVhbkZ1bmN0aW9uLCBhZGRlZCBhIAoJICBjb21tZW50CgkqIFRPRE86IHVwZGF0ZWQKClNhdCBKYW4gIDYgMjI6MDU6MDkgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIHBhcnNlci5jIHBhcnNlckludGVybmFscy5jOiBhcHBsaWVkIEJqb3JuIFJlZXNlIG9wdGltaXphdGlvbgoJICBwYXRjaAoKU2F0IEphbiAgNiAxOToxMzoyNyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogTWFrZWZpbGUuYW06IGFwcGxpZWQgcGF0Y2ggZnJvIG1ha2UgY2hlY2sgZnJvbSBNYXJ0aW4gVmlkbmVyCgpUaHUgSmFuICA0IDE5OjA3OjQ5IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyAyLjIuMTEKCSogZG9jL2h0bWwvKjogcmVidWlsZCB0aGUgSFRNTCBmaWxlcwoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkCgpUaHUgSmFuICA0IDE0OjA5OjU4IENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB0cmVlLmM6IGZpeGVkIGEgc3R1cGlkIGJ1ZwoJKiB2YWxpZC5jOiBhcHBsaWVkICJQYXVsIEQuIFNtaXRoIiA8cGF1c21pdGhAbm9ydGVsbmV0d29ya3MuY29tPgoJICBwYXRjaGVzIHJlbGF0ZWQgdG8gdmFsaWRhdGlvbiBvZiBhbiBYSW5jbHVkZSBwcm9jZXNzaW5nIHJlc3VsdAoJKiBUT0RPOiB1cGRhdGVkCgpUaHUgSmFuICA0IDExOjQ2OjQwIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiBlbmNvZGluZy5jIHhtbElPLmM6IEZpeGluZyB0aGUgcHJvYmxlbSByZXBvcnRlZCBieSBNYXJjIFNhbmZhY29uCgkgIG9uIGxhcmdlIGZpbGVzCgpXZWQgSmFuICAzIDIxOjUxOjEzIENFVCAyMDAxIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQGltYWcuZnI+CgoJKiB4bWxJTy5jOiBmaXhlZCB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZU1lbSBkb2MKCldlZCBKYW4gIDMgMTg6NTY6MDAgQ0VUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KCgkqIEhUTUxwYXJzZXIuYzogaHRtbENoZWNrUGFyYWdyYXBoIHRvIGNoZWNrIGh0bWxPbWl0dGVkRGVmYXVsdFZhbHVlLAoJICByZXBvcnRlZCBieSBKb25hcyBCb3Jnc3Ry9m0KCSogbmFub2h0dHAuYzogQXBwbGllZCBCam9ybiBSZWVzZScgSVBWNiBmaXJzdCBwYXRjaAoKV2VkIEphbiAgMyAxNjoxOTozOSBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogdGVzdFhQYXRoLmMgeHBhdGguYzogZml4aW5nIHRoZSBYUGF0aCB1bmlvbiBleHByZXNzaW9ucyBwcm9ibGVtCgkgIHJlcG9ydGVkIGJ5ICBNYXJ0aW4gVmlkbmVyIDxtYXJ0aW5AYXJ0YXgua2FybGluLm1mZi5jdW5pLmN6PgoKV2VkIEphbiAgMyAxNDoyMjozMyBDRVQgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgoKCSogeG1sbGludC5jOiBNYWRlIGlzIHNvIGlmIHRoZSBmaWxlIG5hbWUgaXMgIi0iIGlzIHdpbGwgcmVhZCBmb3JtCgkgIHN0YW5kYXJkIGlucHV0LiBTdmVuIEhlaW5pY2tlICA8c3ZlbkB6ZW4ub3JnPgoJKiB0cmVlLmM6IGZpeGVkIGEgcHJvYmxlbSB3aGVuIGdyb3dpbmcgYnVmZmVyCgkqIHRyZWUuaDogZml4ZWQgdGhlIGNvbW1lbnQgb2YgdGhlIG5vZGUgdHlwZXMgZm9sbG93aW5nIGFuZGVyc2NhCgkgIGNvbW1lbnQKCSogVE9ETzogdXBkYXRlZAoKV2VkIERlYyAyNyAxMjozNTo0OSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF06IGFkZGVkIGEgd2F5IHRvIGF2b2lkIGFkZGluZyBhdXRvbWF0aWNhbGx5CgkgIG9taXR0ZWQgdGFncy4gaHRtbEhhbmRsZU9taXR0ZWRFbGVtKCkgYWxsb3dzIHRvIGNoYW5nZSB0aGUKCSAgZGVmYXVsdCBoYW5kbGluZy4KCSogdHJlZS5bY2hdIHhtbGxpbnQuYzogYWRkZWQgeG1sRG9jRHVtcEZvcm1hdE1lbW9yeSgpIGFuZCAKCSAgeG1sRG9jRHVtcEZvcm1hdE1lbW9yeUVuYygpLCB1c2VzIG1lbW9yeSBmdW5jdGlvbnMgZm9yIG91dHB1dAoJICBvZiB4bWxsaW50IHRvbyB3aGVuIHVzaW5nIC0tbWVtb3J5IGZsYWcsIGFkZGVkIGEgbWVtb3J5IHRlc3QKCSAgc3VpdGUgYXQgdGhlIE1ha2VmaWxlIGxldmVsLgoJKiB4cGF0aEludGVybmFscy5oIHhwYXRoLltjaF0geHBvaW50ZXIuYzogZml4ZWQgcHJvYmxlbXMKCSAgd2l0aCBuYW1lc3BhY2UgdXNlIHdoZW4gZW5jb3VudGVyaW5nIFFOYW1lcyBpbiBYUGF0aCBldmFsYXRpb24sCgkgIGFkZGVkIHhtbG5zKCkgc2NoZW1lIGluIFhQb2ludGVyLgoJKiBuYW5vZnRwLmMgOiBpbmNvcnBvcmF0ZWQgYSBmaXgKCSogcGFyc2VyLmMgeG1sSU8uYzogZml4ZWQgcHJvYmxlbXMgcmFpc2VkIHdpdGggZW5jb2Rpbmcgd2hlbiB1c2luZwoJICB0aGUgbWVtb3J5IEkvTwoJKiBwYXJzZXJJbnRlcm5hbHMuYzogY2xvc2VkIGJ1ZyAyNTkzNCByZXBvcnRlZCBieSAKCSAgdG9yc3Rlbi5sYW5kc2Nob2ZmQGlubm9taW5hdGUuZGUKCSogVE9ETzogdXBkYXRlZAoKU2F0IE5vdiAyNSAxMTo0NjoyNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4gZG9jL2h0bWwvKiBkb2MveG1sLmh0bWw6IG1hZGUgYSAyLjIuOSByZWxlYXNlCgkgIG9uIGEgbm9uLXVwZGF0ZWQgdHJlZSA6LSgsIG1hZGUgYSAyLjIuMTAgcmVsZWFzZSB0byBjb3JyZWN0IHRoZQoJICBzaXR1YXRpb24KClNhdCBOb3YgMjUgMTA6NDE6MzcgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYyBwYXJzZXIuW2NoXSB0cmVlLltjaF0geG1sSU8uW2NoXSB4bWxsaW50LmMgeHBhdGguYwoJICBwYXJzZXJJbnRlcm5hbHMuaCB2bXMvYnVpbGRfbGlieG1sLmNvbSB2bXMvY29uZmlnLnZtcyBNYWtlZmlsZS5hbToKCSAgaW50ZWdyYXRlZCBhIHNldCBvZiBPcGVuVk1TIGNoYW5nZXMgZnJvbSBIb3dhcmQgVGF5bG9yCgkgIDxIb3dhcmQuVGF5bG9yQHBhY29hc3QuY29tPgoKU2F0IE5vdiAyNSAwMToyMTowMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0geG1sSU8uYzogYWRkZWQgeG1sRG9jRHVtcE1lbW9yeUVuYygpIGZyb20gSm9obiBLcm9sbAoJKiBlcnJvci5jOiBhcHBsaWVkIGZpeCBzdWdnZXN0ZWQgYnkgIkxlbyBEYXZpZHNvbiIgPGxlb0BveC5jb21wc29jLm5ldD4KClNhdCBOb3YgMjUgMDA6MjQ6NDkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBzb21lIGZpeGVzIG9uIGF1dG8tb3BlbiBvZiBodG1sL2hlYWQvYm9keQoJKiBlbmNvZGluZy5jOiBmaXhlZCBhIGNvbXBpbGF0aW9uIGVycm9yIG9uIHNvbWUgZ2NjIGVudgoJKiB4cGF0aC5jIHhwb2ludGVyLltjaF0geHBhdGhJbnRlcm5hbHMuaDogaW1wcm92ZWQgdGhlCgkgIFhQb2ludGVyIGltcGxlbWVudGF0aW9uCgkqIHRlc3QvWFBhdGgveHB0ci9zdHJwb2ludCB0ZXN0L1hQYXRoL3hwdHIvc3RycmFuZ2UzOiBhZGRlZAoJICByZWxhdGVkIFhQb2ludGVyIHRlc3RzIGFuZCBhc3NvY2lhdGVkIHJlc3VsdHMKCkZyaSBOb3YgMjQgMTQ6MDE6NDQgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbGR0ZC5odG1sIGRvYy94bWwuaHRtbDogZm9sbG93aW5nIGEgc2hvcnQgc3RlcCBieSBzdGVwCgkgIGd1aWRhbmNlIG9uIElSQyB0byBoZWxwIG1hY2llaiB3aXRoIERURHMgSSBzdGFydGVkIGEgc21hbGwKCSAgcGFnZSBvbiB0aGUgc3ViamVjdC4KCkZyaSBOb3YgMTcgMTc6Mjg6MDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBoYW5kbGluZyBvZiBicm9rZW4gY2hhcnJlZnMKCSogeG1sbWVtb3J5LmggbGlieG1sMi5kc3AgaW5jbHVkZS93aW4zMmNvbmZpZy5oOiByZXBvcnRpbmcgV2luZG93cwoJICBwYXRjaGVzCgpNb24gTm92IDEzIDE5OjE3OjIwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCBkb2MvaHRtbC8qIDogcmVidWlsdCB0aGUgZG9jcyBhZnRlciBhZGRpbmcKCSAgeGluY2x1ZGUgYW5kIHVwZGF0ZWQgcGFnZSBmb3IgMi4yLjcgYW5kIDIuMi44CgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDIuMi44CgpNb24gTm92IDEzIDEyOjM5OjM4IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIHBhcnNlckludGVybmFscy5jOiBhcHBsaWVkIHRoZSBjb25kaXRpb25hbAoJICBzZWN0aW9uIHByb2Nlc3NpbmcgZml4IGZyb20gSm9uYXRoYW4gUCBTcHJpbmdlcgoJICA8am9uYXRoYW4uc3ByaW5nZXIyQGd0ZS5uZXQ+CgkqIHhtbHZlcnNpb24uaC5pbiB3aW4zMi9saWJ4bWwyL2xpYnhtbDIuZHNwIDogVXBkYXRlZCBNUwoJICBwcm9qZWN0IGZpbGUsIGZpeGVkIGljb252IGRlZmF1bHQgbm9uIHN1cHBvcnQKCSogeHBhdGguYzogZml4ZWQgdGhlIHByb2JsZW0gb2YgZXZhbHVhdGluZyByZWxhdGl2ZSBleHByZXNzaW9ucwoJICB3aGVuIGEgbm9kZSBjb250ZXh0IGlzIHByb3ZpZGVkLgoKU3VuIE5vdiAxMiAxNjozMToxOSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmM6IGZpeGVkIGdjYyAyLjk1IG5ldyB3YXJuaW5ncwoJKiBTQVguYzogZml4ZWQgYSBzdHVwaWQgYnVnCgkqIHRyZWUuYzogZml4ZWQgYSBmb3JtYXR0aW5nIHByb2JsZW0gd2hlbiByb3VuZC10cmlwcGluZwoJICBmcm9tL3RvIG1lbW9yeQoJKiB4aW5jbHVkZS5jOiBjaGFzZWQgbWVtbGVhaywgZml4ZWQgYSBiYXNlIHByb2JsZW0KCSogeHBvaW50ZXIuYzogYWRkZWQgeG1sWFB0ckJ1aWxkUmFuZ2VOb2RlTGlzdCgpLCBmaW5pc2hlZCA/IAoJICB4bWxYUHRyQnVpbGROb2RlTGlzdCgpCgkqIFRPRE86IHVwZGF0ZWQKCSogTWFrZWZpbGUuYW0gdGVzdC9YSW5jbHVkZS9kb2NzIHRlc3QvWEluY2x1ZGUvZW50cyByZXN1bHQvWEluY2x1ZGU6CgkgIGFkZGluZyBhIGZpcnN0IHNtYWxsIHNldCBvZiByZWdyZXNzaW9uIHRlc3RzIGZvciBYSW5jbHVkZQoKVHVlIE5vdiAgNyAxNToxMTozNCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5bY2hdOiBhcHBsaWVkIFdheW5lIERhdmlzb24gcGF0Y2hlcyB0byBhY2Nlc3MKCSAgdGhlIFdXVy1BdXRob3JpemF0aW9uIGhlYWRlci4KCSogcGFyc2VyLmM6IENsb3NlZCBCdWcjMzA4NDc6IFByb2JsZW1zIHdoZW4gc3dpdGNoaW5nIGVuY29kaW5nCgkgIGluIHNob3J0IGZpbGVzIGJ5IGFwcGx5aW5nIFNpbW9uIEJlcmcncyBwYXRjaC4KCSogdmFsaWQuYzogZml4ZWQgYSB2YWxpZGF0aW9uIHByb2JsZW0KCSogaGFzaC5jIHBhcnNlci5oIHBhcnNlckludGVybmFscy5oIHRlc3RIVE1MLmMgdGVzdFNBWC5jIHRyZWUuaAoJICB4bWxlcnJvci5oIHhtbG1lbW9yeS5oIHhtbHZlcnNpb24uaC5pbjogYXBwbGllZCBhIERMTCBwYXRjaCBmcm9tCgkgIFdheW5lIERhdmlzb24KCSogeHBvaW50ZXIuW2NoXTogYWRkZWQgZmlyc3QgdmVyc2lvbiBvZiB4bWxYUHRyQnVpbGROb2RlTGlzdCgpCgkgIG5lZWQgdG8gYmUgZXh0ZW5kZWQgdG8gbm9uIGZ1bGwgbm9kZXMgc2VsZWN0aW9ucy4KCSogeGluY2x1ZGUuYzogc3RhcnRzIHRvIHdvcmsgZGVjZW50bHkKCk1vbiBOb3YgIDYgMTc6MjI6NDYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIHhpbmNsdWRlLltjaF0geG1sbGludC5jIGNvbmZpZ3VyZS5pbiB2YWxpZC5jCgkgIGRlYnVnWE1MLmMgeG1sdmVyc2lvbi5oLmluOiBTdGFydGVkIGFkZGluZyBYSW5jbHVkZSBzdXBwb3J0LAoJICB0aGlzIGlzIGEgbmV3IHhtbGxpbnQgb3B0aW9uCgkqIHRyZWUuYyB4cGF0aC5jOiBhcHBsaWVkIFRPTSBwYXRjaGVzIGZvciBYUGF0aAoJKiB4cG9pbnRlci5jOiBmaXhlZCBhIGNvdXBsZSBvZiBlcnJvcnMuCgkqIHVyaS5jOiBhZGRlZCBhbiBlc2NhcGluZyBmdW5jdGlvbiBuZWVkZWQgZm9yIHhpbmNsdWRlCgkqIHRlc3RYUGF0aC5jIGhhc2guYyBIVE1MdHJlZS5jOiBtaW5vciBjbGVhbnVwcyByYWlzZWQgYnkKCSAgbmV3IHdhcm5pbmcgZnJvbSBSSDcwIGdjYydzIHZlcnNpb24KClR1ZSBPY3QgMzEgMTQ6MTQ6MTMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBsb29wIG9uIGludmFsaWQgY2hhciBpbiBzY3JpcHRzCgkqIHBhcnNlci5jOiB1cGRhdGUgdG8gZGVzY3JpcHRpb24gb2YgeG1sSU9QYXJzZURURCgpCgkqIGxpYnhtbC5tNCB4bWx2ZXJzaW9uLmguaW46IGNoYW5nZXMgY29udHJpYnV0ZWQgYnkKCSAgTWljaGFlbCBTY2htZWluZyA8bS5zY2htZWluZ0BpbnRlcm5ldC1mYWN0b3J5LmRlPgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBmb3IgMi4yLjcKCSogTWFrZWZpbGUuYW06IHRyeWluZyB0byBhdm9pZCAgY29uZmlnLmggYW5kIGFjY29uZmlnLmgKCSAgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWIKCSogY29uZmlndXJlLmluOiByZWxlYXNlZCAyLjIuNwoKTW9uIE9jdCAzMCAxNzowODoxMCBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0gZGVidWdYTUwuYyBwYXJzZXJJbnRlcm5hbHMuYyB4cGF0aC5jOiBEZXByZWNhdGVkIFBpJ3MKCSAgbGlrZSBuYW1lc3BhY2VzIGZvciBnb29kLiBVbmlmaWVkIHhtbE5zIGFuZCB4bWxOb2RlIHNvbWV3aGF0LgoKTW9uIE9jdCAzMCAxNjoyNjo0OSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXTogYWRkZWQgeG1sSU9QYXJzZURURCgpCgkqIHhwb2ludGVyLmM6IGFkZGVkIHN1cHBvcnQgZm9yIHRoZSAyIGV4dHJhIHBhcmFtZXRlcnMgb2YKCSAgc3RyaW5nLXJhbmdlLCBmaXhlZCBhIHN0b29waWQgZXJyb3Igd2hlbiAnMCcgd2FzIHByZXNlbnQKCSAgaW4gWFBvaW50ZXIgZXhwcmVzc2lvbnMKCSogdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlMiByZXN1bHQvWFBhdGgveHB0ci9zdHJyYW5nZTI6IGFkZGVkCgkgIHRlc3RzdWl0ZSBmb3IgdGhlIGFib3ZlCgpNb24gT2N0IDMwIDEwOjI2OjQzIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBpbXByb3ZlZCBwYWNrYWdlIGRlc2NyaXB0aW9ucwoKU3VuIE9jdCAyOSAxOTowMzoxMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHhwYXRoSW50ZXJuYWxzLmg6IGFwcGxpZWQgYSBsYXJnZSBjbGVhbmluZyBwYXRjaAoJICBmcm9tIFRPTSA8cHRpdHRvbUBmcmVlLmZyPiwgaXQgYWxzbyBhZGQgbmFtZXNwYWNlIHN1cHBvcnQKCSAgZm9yIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZXMgcmVnaXN0cmF0aW9uLgoKU3VuIE9jdCAyOSAxODo1MTo0NiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYzogV2F5bmUgRGF2aXNvbidzIHBhdGNoIGZpeGluZyB4bWxCdWlsZFVSSSgpCgkqIE1ha2VmaWxlLm1pbmd3OiBXYXluZSBEYXZpc29uJ3MgdXBkYXRlIGFkZGluZyBoYXNoLmMKClN1biBPY3QgMjkgMTg6Mzg6MTIgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguYzogZml4ZWQgdGhlIHJvb3QgZXZhbHVhdGlvbiBwcm9ibGVtcwoJKiBIVE1McGFyc2VyLmMgcmVzdWx0L0hUTUwvZG9jMy5odG06IGZpeGVkIHRoZSBwcm9ibGVtIG9mIG5vbgoJICBpZ25vcmFibGUgc3BhY2VzIHdpdGggPGI+IDxib2xkPiA8ZW0+CgkqIHRyZWUuYzogZml4ZWQgYSBsb29wIGluIHhtbFNlYXJjaE5zQnlIcmVmKCkKCkZyaSBPY3QgMjcgMTg6NTc6MzIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmM6IGFwcGxpZWQgYW5vdGhlciBYUGF0aCBwYXRjaCBmcm9tIFRPTSAKCSogeHBhdGguYyBpbmNsdWRlL21ha2VmaWxlLmFtOiBhcHBsaWVkIGFub3RoZXIgcGF0Y2ggZnJvbSAKCSAgY2hpbmFAdGhld3JpdHRlbndvcmQuY29tIChjbGVhbnVwIG9uIElSSVgpLgoKRnJpIE9jdCAyNyAxMzo0NToyOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy4xOiByZWNlaXZlZCBhIGZpeGVkIHZlcnNpb24gZnJvbSBGcmVkcmlrIEhhbGxlbmJlcmcKCSAgPGhhbGxvbkBseXNhdG9yLmxpdS5zZT4KClRodSBPY3QgMjYgMTY6MDU6MjUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmMgdGV4dFhQYXRoLmMgeHBhdGhJbnRlcm5hbHMuaDogYXBwbGllZCBUT00gPHB0aXR0b21AZnJlZS5mcj4KCSAgY2xlYW51cCBwYXRjaCBmb3IgWFBhdGgKCldlZCBPY3QgMjUgMjE6MzE6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhdGNoZWQgdG8gcmVkaXJyZWN0IGFsbCAib3V0IG9mIGNvbnRleHQiIGVycm9yIG1lc3NhZ2VzIHRvCgkgIGEgcmVjb25maWd1cmFibGUgcm91dGluZS4gVGhlIGNoYW5nZXMgYXJlOgoJKiB4bWxlcnJvci5oIDogYWRkZWQgdGhlIGV4cG9ydCBvZiBhbiBlcnJvciBjb250ZXh0IHR5cGUgKHZvaWQgKikKCSAgYW4gZXJyb3IgaGFuZGxlciB0eXBlIHhtbEdlbmVyaWNFcnJvckZ1bmMgdGhlcmUgaXMgYW4gaW50ZXJmYWNlCgkgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmModm9pZCAqY3R4LCB4bWxHZW5lcmljRXJyb3JGdW5jIGhhbmRsZXIpOwoJICB0byByZXNldCB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZSBhbmQgaXRzIGFyZ3VtZW50CgkgIChieSBkZWZhdWx0IGl0J3MgZXF1aXZhbGVudCB0byByZXNwZWN0aXZlbHkgZnByaW50ZiBhbmQgc3RkZXJyLgoJKiBhbGwgdGhlIGMgZmlsZXM6IGFsbCB3aWxkIGFjY2Vzc2VzIHRvIHN0ZGVyciBvciBzdGRvdXQgd2l0aGluCgkgIHRoZSBsaWJyYXJ5IGhhdmUgYmVlbiByZXBsYWNlZCB0byBjYWxscyB0byB0aGUgaGFuZGxlci4KCldlZCBPY3QgMjUgMTU6Mjc6MTkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzZSAyLjIuNgoJKiB4cGF0aC5bY2hdIHhwb2ludGVyLmMgeHBhdGhJbnRlcm5hbHMuaDogYWRkZWQgeHBhdGhJbnRlcm5hbHMuaAoJICBleHBvcnRpbmcgdGhlIGlubmVyIGZ1bmN0aW9ucyBvZiB4cGF0aCBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMKCSogZG9jLyo6IHVwZGF0ZWQgYW5kIHJlYnVpbHQgdGhlIGRvYwoKV2VkIE9jdCAyNSAxMjo0ODo1NSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuYyA6IGFwcGxpZWQgV2F5bmUgSFRUUCBjbGVhbnVwIHBhdGNoCgkqIHRyZWUuW2NoXTogYXBwbGllZCBUT00gPHB0aXR0b21AZnJlZS5mcj4gZm9yIHhtbE5vZGVTZXRCYXNlKCkKCSAgYW5kIHhtbE5vZGVTZXRTcGFjZVByZXNlcnZlKCkKCldlZCBPY3QgMjUgMTI6MTE6MDMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLmM6IGNsb3NpbmcgYnVnICMyOTI2MAoKVHVlIE9jdCAyNCAxODo0OTozNCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogaGFzaC5bY2hdIGRlYnVnWE1MLmM6IGV4cGFuZGVkL2VuaGFuY2VkIHRoZSBBUEksIGFkZGVkCgkgIG11bHRpa2V5IHR1cGxlcywgbWFkZSBoYXNoIHN0cnVjdHVyZSBvcGFxdWUKCSogdmFsaWQuW2NoXTogbW92ZWQgZWxlbWVudHMsIGF0dHJpYnV0ZXMsIG5vdGF0aW9ucyBkZWNhbGFyYXRpb25zCgkgIGFzIHdlbGwgYXMgSUQgYW5kIHJlZnMgdG8gaGFzaCB0YWJsZXMuCgkqIGVudGl0aWVzLmM6IGhhc2ggY2xlYW51cAoJKiB4bWxtZW1vcnkuYzogZml4ZWQgYSBkdW1wIHByb2JsZW0gaW4gZGVidWcgbW9kZQoJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBwcm9ibGVtIHBhc3NpbmcgaW4gREVTVERJUj0gdmFsdWVzIHBhdGNoCgkgIGZyb20gTWFyYyBDaHJpc3RlbnNlbiA8bWFyY0BjYWxkZXJhc3lzdGVtcy5jb20+CgkqIG5hbm9odHRwLmM6IHJlbW92ZWQgZGVidWdnaW5nIHJlbWFpbnMKCSogSFRNTHBhcnNlci5jOiB0aGUgYm9ndXMgdGFnIHNob3VsZCBiZSBpZ25vcmVkIChXYXluZSkKCSogSFRNTHBhcnNlci5jIHBhcnNlci5jOiBmaXhpbmcgYSBudW1iZXIgb2YgcHJvYmxlbXMgd2l0aCB0aGUKCSAgbWFjcm9zIGluIHRoZSAqcGFyc2VyLmMgZmlsZXMgKFdheW5lKS4KCSogSFRNTHBhcnNlci5jOiBjbG9zZSB0aGUgcHJldmlvdXMgb3B0aW9uIHdoZW4gb3BlbmluZyBhIG5ldyBvbmUKCSAgKE1hcmMgU2FuZmFjb24pLgoJKiByZXN1bHQvSFRNTC8qOiB1cGRhdGVkIHRoZSBIVE1MIHJlc3VsdHMgYWNjb3JkaW5nbHkKClN1biBPY3QgMjIgMTg6Mzk6MTkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVudGl0aWVzLltjaF0geHBhdGguW2NoXSBoYXNoLltjaF0gZGVidWdYTUwuYyB0cmVlLmg6IGFkZGVkL2hhY2tlZAoJICBoYXNoIHRhYmxlcyBmcm9tIEJqb3JuIFJlZXNlIDxicmVlc2VAbWFpbDEuc3RvZmFuZXQuZGs+LiBTd2l0Y2hlZAoJICBYUGF0aCBmdW5jdGlvbnMgYW5kIFhNTCBlbnRpdGllcyB0YWJsZSB0byB0aGVtLiBNb3JlIHRvIGNvbWUuLi4KCSogeG1sSU8uYzogZml4ZWQgbGlieG1sIGNsb3NpbmcgRklMRXMgaXQgZGlkbid0IG9wZW4uCgpTdW4gT2N0IDIyIDEzOjU5OjUwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmM6IGNvYWxlc2NlIGFkamFjZW50IHRleHQgbm9kZXMKCSogdmFsaWQuYzogaGFuZGxpbmcgb2YgYmxhbmsgbm9kZXMgaW4gRFRkIHZhbGlkYXRpb24gKHJhaXNlZAoJICBieSBwcm9ibGVtcyB3aXRoIGEgcG9zdGVyaW9yaSB2YWxpZGF0aW9uKS4KCSogbmFub2h0dHAuYzogY2hhbmdpbmcgYmVoYXZpb3VyIG9uIEhUVFAgd3JpdGUgc3R1ZmYuCgkqIEhUTUx0cmVlLmM6IGZvcmNlZCBib2R5IGFuZCBodG1sIHRvIGJlIGV4cGxpY2l0ZWx5IGNsb3NlZC4KCSogeHBhdGguaDogZXhwb3J0ZWQgbW9yZSBYUGF0aCBmdW5jdGlvbnMuCgpTdW4gT2N0IDE1IDIyOjI4OjMyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBSZWxlYXNlIG9mIDIuMi41CgkqIHhwb2ludGVyLmM6IHJhbmdlKCkgcmFuZ2UtaW5zaWRlIGFuZCBvdGhlciBoZWxwZXIgZnVuY3Rpb25zCgkqIHBhcnNlckludGVybmFscy5jOiBmaXhlZCBwZXJmIHByb2JsZW0gcmFpc2VkIGJ5IHJvbGZAcG9pbnRzbWFuLmRlCgpTdW4gT2N0IDE1IDE2OjIxOjI3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYzogSFRNTCBhdHRyaWJ1dGVzIG5lZWQgbm9ybWFsaXphdGlvbiB0b28gKEJqb3JuIFJlZXNlKQoJKiBIVE1McGFyc2VyLltjaF06IGFkZGRlZCBodG1sSXNTY3JpcHRBdHRyaWJ1dGUoKQoKU3VuIE9jdCAxNSAxMzoxODozNiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jLyo6IHJlYnVpbHQgZG9jcyBwcmVwYXJpbmcgZm9yIDIuMi41IHJlbGVhc2UsIGFkZGVkIFVSSQoJICBhbmQgWFBvaW50ZXIgbW9kdWxlcwoKU3VuIE9jdCAxNSAxMjoxMzozMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmg6IGNsb3NlZCAjMjUxMDcKClN1biBPY3QgMTUgMTI6MDY6MTYgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RTQVguYzogZml4ZWQgcHJvYmxlbSB3aXRoIGNkYXRhIHJlcG9ydGluZwoJKiBTQVhyZXN1bHQvKiA6IHVwZGF0ZWQKClN1biBPY3QgMTUgMTI6MDA6MjQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIHRlc3Qvd2FwLnhtbCByZXN1bHQvbm9lbnQvd2FwLnhtbCByZXN1bHQvd2FwLnhtbDoKCSAgQ2xvc2VkIGJ1ZyAjMjc0OTksIGFkZGVkIHRvIHJlZ3Jlc3Npb24gdGVzdHMKCSogVE9ETzogdXBkYXRlZAoKU3VuIE9jdCAxNSAwMTozNDozNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIEhUTUx0cmVlLltjaF0gU0FYLmMgdGVzdEhUTUwuYyB0cmVlLmM6IGZpeGVkIEhUTUwKCSAgc3VwcG9ydCBmb3IgU0NSSVBUIGFuZCBTVFlMRSB3aXRoIGhlbHAgZnJvbSBCam9ybiBSZWVzZQoJKiB0ZXN0L0hUTUwvKiByZXN1bHQvSFRNTC8qOiBhZGRlZCBzaW1wbGUgdGVzdGNhc2UgYW5kIHVwZGF0ZWQKCSAgdGhlIGV4aXN0aW5nIG9uZXMuCgpGcmkgT2N0IDEzIDE4OjI0OjMxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHhwb2ludGVyLmM6IFhQb2ludGVyIHJlb3JkZXIgb2YgcmFuZ2VzIHN0YXJ0L2VuZCBhbmQKCSAgc3RyaW5nLXJhbmdlIGZvciBlbXB0eSBzdHJpbmdzCgkqIHRlc3QvWFBhdGgvZG9jcy9zdHIgdGVzdC9YUGF0aC94cHRyL2NoYXB0ZXJzcmFuZ2UKCSAgdGVzdC9YUGF0aC94cHRyL3N0cnJhbmdlOiBhdWdtZW50ZWQgdGhlIFhQb2ludGVyIHRlc3RzdWl0ZQoKRnJpIE9jdCAxMyAxMjoyMTo0OCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIGRvYy94bWxtZW0uaHRtbDogYWRkZWQgYSBtb2R1bGUgZGVzY3JpYmluZyBtZW1vcnkKCSAgaW50ZXJmYWNlcyBhbmQgdXNlLCB1cGRhdGVkIHRoZSBtYWluIHBhZ2UuCgpGcmkgT2N0IDEzIDAxOjIzOjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYyB4bWxJTy5jOiBXYXluZSBEYXZpc29uIFdpbjMyIHBhdGNoCgkgIG5hbm9mdHAgY29kZSB3b3JrIG9uIFdpbmRvd3MgdG9vIG5vdwoKRnJpIE9jdCAxMyAwMDo1NDozNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFhQYXRoLmMgeHBhdGguW2NoXTogbW92ZWQgc29tZSBkZWJ1ZyBmdW5jdGlvbnMgdG8geHBhdGggY29yZQoJKiB4cG9pbnRlci5jOiBpbXBsZW1lbnRlZCBzdHJpbmctcmFuZ2UoKSBhdCBsZWFzdCBhIGdvb2QgZmlyc3QgdmVyc2lvbgoJKiB0ZXN0L1hQYXRoL2RvY3Mvc3RyIHRlc3QvWFBhdGgveHB0ci9zdHJyYW5nZQoJICByZXN1bHQvWFBhdGgveHB0ci9zdHJyYW5nZTogdGhlIHN0cmluZy1yYW5nZSgpIHRlc3RzCgpUaHUgT2N0IDEyIDEwOjAyOjU5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSBpbmNsdWRlL01ha2VmaWxlLmFtIGluY2x1ZGUvd2luMzJjb25maWcuaAoJICB3aW4zMi9NYWtlZmlsZS5taW5ndzogZml4ZWQgcHJvYmxlbXMgcmVwb3J0ZWQgYnkgV2F5bmUgRGF2aXNvbgoJICBhbmQgbWFrZSBkaXN0Y2hlY2sKClRodSBPY3QgMTIgMDE6NDQ6MDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9odHRwLmM6IGFkZGVkIHhtbE5hbm9IVFRQVGltZW91dChpbnQgZGVsYXkpLCByZW1vdmVkIGEgYnVnCgkgIHhtbE5hbm9IVFRQTWV0aG9kIG9uIGlucHV0IE1pbWVUeXBlIFRvbnkgTGFtIDxUb255LkxhbUBlbmcuc3VuLmNvbT4KCSogeHBvaW50ZXIuYzogc2xpZ2h0IGV4dGVuc2lvbiBvZiB4bWxYUHRyTG9jYXRpb25TZXRNZXJnZQoKVGh1IE9jdCAxMiAwMTozNzo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlnLmguaW4gY29uZmlndXJlLmluIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhtbHZlcnNpb24uaC5pbiA6CgkgIHBhdGNoIGZvciBzb2NrbGVuX3QgZGV0ZWN0aW9uIGJ5CgkgIEFsYmVydCBDaGluLUEtWW91bmcgPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT4KCldlZCBPY3QgMTEgMTc6NTM6NTcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyB2YWxpZC5jIHhtbGxpbnQuYzogRml4ZWQgYSBmZXcgcG9zdHZhbGlkYXRpb24gYnVncwoJICBhbmQgYWRkZWQgYSAtLWR0ZHZhbGlkIG9wdGlvbiB0byB4bWxsaW50IHVzZWQgdG8gdGVzdCBpdAoKV2VkIE9jdCAxMSAxNTowMToyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sLWNvbmZpZy4xIE1ha2VmaWxlLmFtIGxpYnhtbC5zcGVjLmluOiBhZGRpbmcgYSBtYW4gcGFnZSBmb3IKCSAgeG1sLWNvbmZpZyBieSBGcmVkcmlrIEhhbGxlbmJlcmcgPGhhbGxvbkBseXNhdG9yLmxpdS5zZT4KCldlZCBPY3QgMTEgMTI6NDE6MzAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhwYXRoLltjaF0geHBvaW50ZXIuW2NoXTogd29ya2VkIG9uIFhQYXRoIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGUKCSAgaGFuZGxpbmdzIChyZWdpc3RyYXRpb24sIGxvb2t1cCwgY2xlYW51cCkKCldlZCBPY3QgMTEgMDE6NDY6NDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiBNYWtlZmlsZS5hbSBpbmNsdWRlL21ha2VmaWxlLmFtOiBhZGRpbmcgWFBvaW50ZXIKCSAgYW5kIFhQdHJ0ZXN0cyB0YXJnZXQKCSogeHBvaW50ZXIuW2NoXSA6IG5ldyBmaWxlcyBmb3IgWFBvaW50ZXIgc3VwcG9ydAoJKiB0ZXN0L1hQYXRoL3hwdHIgcmVzdWx0L1hQYXRoL3hwdHI6IGFkZGVkIFhQb2ludGVyIHRlc3RzdWl0ZSBhbmQKCSAgbW9yZSBYUGF0aCB0ZXN0cwoKV2VkIE9jdCAxMSAwMToyMzoyNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBmaXhlZCwgdmVyeSBicm9rZW4sIG1ha2UgZGlzdGNoZWNrIHdvcmtzIGFnYWluCgpXZWQgT2N0IDExIDAyOjUzOjEwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNb3JlIHdvcmsgdG93YXJkIDIuMi41LCBpbnRlZ3JhdGVkIGEgbnVtYmVyIG9mIHBhdGNoZXMKCSogY29uZmlndXJlLmluIE1ha2VmaWxlLmFtIHdpbjMyY29uZmlnLmguaW46IHRyeWluZyB0byBjbGVhbnVwCgkgIG1ha2UgZGlzdGNoZWNrIC4uLi4gaHVoIC4uLgoJKiBpbmNsdWRlL01ha2VmaWxlLmFtIGluY2x1ZGUvd2luMzJjb25maWcuaDogbmV3IGRpcmVjdG9yeQoJICBmb3IgaW5jbHVkZXMKCSogd2luMzIvTWFrZWZpbGUubWluZ3cgd2luMzIvUkVBRE1FLk1TRGV2IHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kc3AKCSAgdXBkYXRlZCB0ZWggbWFrZWZpbGVzIGFuZCBpbnN0cnVjdGlvbnMgZm9yIFdJTjMyCgkqIHhwYXRoLmM6IHNtYWxsIGZpeGVzCgkqIHRlc3QvWFBhdGgvIHJlc3VsdHMvWFBhdGg6IHVwZGF0ZWQgdGhlIHRlc3RjYXNlcyBhbmQgcmVzdWx0cwoJKiBIVE1McGFyc2VyLmMgbmFub2h0dHAuYyB0ZXN0WFBhdGguYzogaW5jb3Jwb3JhdGVkIHByb3ZpZGVkIG9yCgkgIHN1Z2dlc3RlZCBwYXRjaGVzCgkqIHZhbGlkLmM6IGZpeGVkIGFuIElEIGJ1ZwoKTW9uIE9jdCAgOSAxNDoyODo1NiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbW92ZWQgeG1sLWVycm9yLmggdG8geG1sZXJyb3IuaDogc2VlbXMgdGhpcyBhbGxvd2VkIHRvIGJ5cGFzcwoJICB0aGUgYXV0b21ha2UgYnVnIHdoZXJlIHdyb25nIGRlcGVuZGVuY2llcyB3ZXJlIGdlbmVyYXRlZC4KCSogeHBhdGguW2NoXTogd29ya2VkIG9uIFhQb2ludGVyCgpGcmkgT2N0ICA2IDEyOjU4OjA0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4gTWFrZWZpbGUuYW06IDIuMi41LCBzaGlwIHRoZSBpbmNsdWRlIGluIGFuCgkgIGluY2x1ZGUvbGlieG1sIHN1YmRpcmVjdG9yeSwgdXNlIHN5bWxpbmtzIHdoZW4gdXNpbmcgQ1ZTCgkqIHRlc3RTQVguYzogZml4ZWQgc21hbGwgYnVnCgkqIHRlc3RYUGF0aC5jOiBjaGFuZ2VkIHRoZSB3YXkgdGVzdGZpbGVzIGFyZSBwYXJzZWQKCSogZGVidWdYTUwuYzogc2FtZSBraW5kIG9mIGNsZWFudXAgd2hlbiBwYXJzaW5nIGFuIGFyZ3VtZW50IGV4cHJlc3Npb24KCSAgWFBhdGgvWFBvaW50ZXJzIGNhbiBoYXZlIGJsYW5rcyBlbWJlZGRlZAoJKiB4cGF0aC5bY2hdOiBtb3JlIGNsZWFudXAsIHJlb3JncyBmb3IgWFBvaW50ZXIgd29yawoJKiBwYXJzZXJJbnRlcm5hbHMuYyBwYXJzZXIuYyBIVE1McGFyc2VyLmM6IGZpeGVkIHdyb25nIGluY2x1ZGUKCSogd2luMzIvUkVBRE1FLk1TRGV2IHdpbjMyL2xpYnhtbDIvbGlieG1sMi5kc3A6IFdpbmRvd3Mgc3R1ZmYKClRodSBPY3QgIDUgMTg6MTM6MTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRlYnVnWE1MLmMgdGVzdFhQYXRoLmMgeHBhdGguW2NoXTogZ290IHBpc3NlZCBieSBzb21lIG5hc3R5bmVzcwoJICBpbiB0aGUgWFBhdGggZW5naW5lLCByZXdyb3RlIGxhcmdlIHBhcnRzIG9mIGl0LCBub3cgaXQncyBmYXIKCSAgY2xlYW5lciBhbmQgaW4gc3luYyB3aXRoIHRoZSBSRUMgbm90IGFuIG9sZCBXRC4gRml4ZWQgYSBwYXJzaW5nCgkgIHByb2JsZW0gaW4gdGhlIGludGVyYWN0aXZlIFhNTCBzaGVsbCBmb3VuZCB3aGVuIHRlc3RpbmcgWFBhdGguCgpXZWQgT2N0ICA0IDE1OjI1OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkZWJ1Z1hNTC5jIHRlc3RYUGF0aC5jIHhwYXRoLltjaF06IE1vcmUgd29yayBvbiBYUGF0aC9YcG9pbnRlciwKCSAgaW5jb3Jwb3JhdGVkICIoVE9NKSIgPHB0aXR0b21AZnJlZS5mcj4gcGF0Y2hlcyByZWJ1aWx0IHRoZSBYUGF0aAoJICBleGFtcGxlcyB3aXRoIHRoZSBleHRyYSB0ZXN0CgpXZWQgT2N0ICA0IDE0OjM5OjAxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyB4bWxJTy5jIHhtbElPLmg6IGZpeGVkIGJ1ZyAyNjY1MCwgYW5kIGltcHJvdmVkCgkgIHRoZSBnbG9iYWwgaW5pdCBmdW5jdGlvbi4KClR1ZSBPY3QgIDMgMTE6Mjg6NTIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogRG9vaGhoLCBhdHRyaWJ1dGUgbmFtZSBwYXJzaW5nIHdhcyBzdGlsbCBjYXNlCgkgIHNlbnNpdGl2ZSAhIEZpeGVkIHRoaXMgLi4uCgkqIHJlc3VsdC9IVE1MLyogOiB1cGRhdGVkIHRoZSB0ZXN0cyByZXN1bHRzIGFjY29yZGluZ2x5CgpNb24gT2N0ICAyIDIzOjQ3OjMyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5bY2hdIGRlYnVnWE1MLmMgdGVzdFhQYXRoLmM6IGZpeGVkIHRoZSBYUGF0aCBldmFsdWF0aW9uCgkgIGVuZ2luZSwgc2hvdWxkIGJlIGZhciBtb3JlIHN0YWJsZSwgaW5jb3Jwb3JhdGVkIGEgbmV3IHZlcnNpb24gb2YKCSAgcHJlY2VkaW5nL2ZvbGxvd2luZyBheGlzLCBuZWVkIHRlc3RpbmcKCSogdXJpLmM6IGZpeGVkIGZpbGU6Ly8vYzovYS9iL2MgcHJvYmxlbQoJKiB0ZXN0L1hQYXRoL3Rlc3RzL2lkc2ltcGxlOiBhdWdtZW50ZWQgdGhlIFhQYXRoIHRlc3RzCgpTdW4gT2N0ICAxIDIyOjMzOjAwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiByZWJ1aWxkaW5nIGRvY3MgZm9yIDIuMi40IHJlbGVhc2UKClN1biBPY3QgIDEgMjI6MTY6MzMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogcmVsZWFzaW5nIDIuMi40CgkqIHBhcnNlci5bY2hdOiBhZGRlZCB4bWxTdHJFcXVhbCgpCgkqIEhUTUxwYXJzZXIuYyBIVE1MdHJlZS5jIFNBWC5jIGRlYnVnWE1MLmMgZW50aXRpZXMuYyBwYXJzZXIuYwoJICB0cmVlLmMgdmFsaWQuYyB4bGluay5jIHhwYXRoLmM6IGNvbnZlcnRlZCBhbGwgIXhtbFN0cmNtcCB0bwoJICB1c2UgeG1sU3RyRXF1YWwgaW5zdGVhZAoJKiBUT0RPOiB1cGRhdGVkCgkqIGFkZGVkIGFuIFhQYXRoIHRlc3QKClN1biBPY3QgIDEgMjA6MTk6MzkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgaHRtbFN0YXJ0Q2xvc2VJbmRleGluaXRpYWxpemVkIGluaXQKCSogZW50aXRpZXMuaDogZXhwb3J0ZWQgeG1sSW5pdGlhbGl6ZVByZWRlZmluZWRFbnRpdGllcwoJKiBwYXJzZXIuW2NoXSA6IGFkZGVkIHhtbEluaXRQYXJzZXIoKQoJKiBwYXJzZXJJbnRlcm5hbHMuaCA6IGhhZCB0byBleHBvcnQgaHRtbEluaXRBdXRvQ2xvc2UoKQoKU3VuIE9jdCAgMSAxNjoyODoyMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeHBhdGguW2NoXSA6IGZpeGVkIHNvbWUgc2VyaW91cyBYUGF0aCBQcmVkaWNhdGUgZXZhbHVhdGlvbgoJICBwcm9ibGVtcwoJKiBNYWtlZmlsZS5hbSA6IGFkZGVkIFhQYXRoIHJlZ3Jlc3Npb24gdGVzdHMgdG8gbm9ybWFsIHRlc3RzCgkqIHVyaS5jOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBsb2NhbCBwYXRocywgY2xlYW51cAoJKiBwYXJzZXIuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggbGFyZ2UgQ0RhdGEgc2VjdGlvbnMKClNhdCBTZXAgMzAgMTY6MzU6NTQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiB4bWwtY29uZmlnLmluOiBwYXRjaCBmcm9tICJCZW4gVGF5bG9yIgoJICA8c29sN3g4NkBob3RtYWlsLmNvbT4gZm9yIHNvbGFyaXMgc2hhcmVkIGxpYnMgbG9va3VwCgoyMDAwLTA5LTMwICBNYXJ0aW4gQmF1bGlnICA8YmF1bGlnQHN1c2UuZGU+CgoJKiBsaWJ4bWwtMi4wLnBjLmluOiBQcm92aWRlIHBrZy1jb25maWcgc2NyaXB0LgoKCSogY29uZmlndXJlLmluOiBDcmVhdGUgdGhlIGxpYnhtbC0yLjAucGMgc2NyaXB0IGZyb20gdGhlCglsaWJ4bWwtMi4wLnBjLmluIHRlbXBsYXRlcy4KCSogTWFrZWZpbGUuYW0gKHBrZ2NvbmZpZ19EQVRBKTogSW5zdGFsbCB0aGUgbGlieG1sLTIuMC5wYwoJc2NyaXB0IGluIGAkKGxpYmRpcikvcGtnY29uZmlnJy4KCk1vbiBTZXAgMjUgMTY6MjM6NDEgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyBwYXJzZXIuYyB0cmVlLmMgdHJlZS5oOiBBdm9pZGluZyBhIGZldyB3YXJuaW5nCgkgIHdoZW4gY29tcGlsaW5nIHdpdGggTVNDCgpTdW4gU2VwIDI0IDIwOjMyOjUyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jOiBwYXRjaCBmb3Igbm9ybWFsaXplLXN0cmluZygpIHN1YnN0cmluZy1iZWZvcmUoKSwKCSAgc3Vic3RyaW5nLWFmdGVyKCkgYW5kIHRyYW5zbGF0ZSgpIGZ1bmN0aW9ucyBmcm9tIEJqb3JuIFJlZXNlCgkgIDxicmVlc2VAbWFpbDEuc3RvZmFuZXQuZGs+CgkqIGxpYnhtbC5tNCBNYWtlZmlsZS5hbTogYWRkZWQgbGlieG1sLm00IGZyb20gRGViaWFuID8KCSAgRnJlZHJpayBIYWxsZW5iZXJnIDxoYWxsb25AbHlzYXRvci5saXUuc2U+CgkqIFRPRE86IHVwZGF0ZWQKClN1biBTZXAgMjQgMTA6MDA6NDkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbHZlcnNpb24uaC5pbiBuYW5vZnRwLmMgbmFub2h0dHAuYzogdHJheWluZyB0byB3b3JrIG91dCB0aGUKCSAgcHJvYmxlbSBvZiBzb2NrbGVuX3QgYmVpbmcgdW5kZWZpbmVkIG9uIGEgbnVtYmVyIG9mIHBsYXRmb3JtcwoJKiBkZWJ1Z1hNTC5jOiBmaXhlZCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gd2hlbiB3aXRob3V0IHNucHJpbnRmCgpTYXQgU2VwIDIzIDEyOjE5OjQ1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgdXJpLmM6IEFub3RoZXIgcGF0Y2ggZnJvbSBXYXluZSBEYXZpc29uLCBjb3JyZWN0aW5nCgkgIGFuIFVSSSBidWcgYW5kIGEgZml4IGZvciB0aGUgY29udHJvbC1jaGFyYWN0ZXItaW5kdWNlZCBpbmZpbml0ZSBsb29wCgkqIG5hbm9odHRwLmM6IHByZXZlbnRpdmUgZml4IGZvciBjb21waWxpbmcgb24gV0lOMzIKCkZyaSBTZXAgMjIgMTg6MDY6MDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbGludC5jOiBjbG9zaW5nIGJ1ZyAjMjUwMDAKCkZyaSBTZXAgMjIgMTQ6MTc6NTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbElPLmggdHJlZS5oOiBtYWRlIHhtbE5vZGVEdW1wKCkgYW5kIHhtbE5vZGVEdW1wT3V0cHV0KCkgcHVibGljCgkqIHBhcnNlci5bY2hdIG5hbm9odHRwLmMgSFRNTHRyZWUuYyBIVE1McGFyc2VyLmMgdHJlZS5jOiBhcHBsaWVkIGFuZAoJICBtb2RpZmllZCBzbGlnaHRseSBXYXluZSBEYXZpc29uIHBhdGNoIGFkZGluZyB4bWxTdHJjYXNlY21wIGFuZAoJICByZWxhdGVkIGZ1bmN0aW9uLCBmaXhpbmcgeG1sU3RybmNtcCgpLCBhbmQgYXNzb2NpYXRlZCBjbGVhbnVwCgkqIHJlc3VsdC9IVE1ML2VudGl0aWVzLmh0bWwuc2F4OiB1cGRhdGluZyByZXN1bHQKClR1ZSBTZXAgMTkgMTQ6MjA6MTAgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHVyaS5jOiBhcHBsaWVkIHBhdGNoIGZvciBVUkkgZXNjYXBpbmcgZnJvbSBXYXluZSBEYXZpc29uCgkgIDx3YXluZWRAYmxvcmYubmV0PgoJKiB0cmVlLmMgcGFyc2VySW50ZXJuYWxzLmMgSFRNTHBhcnNlci5jOiBtZW1zZXQgY2hlY2tzIHBhdGNoZXMKCSAgZnJvbSBEZW5pcyBCYXJiaWVyIDxiYXJiaWVyQGltYWNzLnBvbHl0ZWNobmlxdWUuZnI+CgkqIEhUTUxwYXJzZXIuYzogVVRGOCBjaGFyYWN0ZXJzIGluIEhUTUwgdGFnLWF0dHJpYnV0ZSB2YWx1ZXMKCSAgcGF0Y2ggZnJvbSBXYXluZSBEYXZpc29uCgpTdW4gU2VwIDE3IDE4OjM3OjAzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgOiB1cGRhdGVkIHdpdGggbmV3IHJlbGVhc2VzLCBhZGRpbmcgImhvdyB0byBoZWxwIgoKU3VuIFNlcCAxNyAxNzo1ODozNyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmMgZGVidWdYTUwuYyBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuYyB0cmVlLmMgdmFsaWQuYyB4cGF0aC5jOgoJICByZW1vdmVkIGEgZmV3IHdhcm5pbmdzIGluIHBlZGFudGljIG1vZGUgLi4uCgkqIHBhcnNlckludGVybmFscy5jIHBhcnNlci5jOiBtb3ZlZCBlbmNvZGluZyBzd2l0Y2hpbmcgZnVuY3Rpb24KCSAgdG8gcGFyc2VySW50ZXJuYWxzLmMKCSogY29uZmlndXJlLmluLCBkb2MvTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IHJlbGVhc2VkIDIuMi4zCgpTYXQgU2VwIDE2IDIwOjEyOjQxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IHNldCBjdHh0LT5lcnJObyBiZWZvcmUgY2FsbGluZyB0aGUKCSAgZXJyb3Igb3Igd2FybmluZyBoYW5kbGVycwoKV2VkIFNlcCAxMyAyMjowMzoxOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VySW50ZXJuYWxzLmMgcGFyc2VySW50ZXJuYWxzLmggcGFyc2VyLmMgTWFrZWZpbGUuYW06CgkgIGNyZWF0ZWQgYSBuZXcgbW9kdWxlIHBhcnNlckludGVybmFscy5jLCBtb3ZlZCBtb3N0IG9mIHRoZQoJICBjb2RlIHNoYXJlZCBieSB0aGUgdmFyaW91cyBwYXJzZXJzIHRoZXJlLCBhcyB3ZWxsIGFzCgkgIGRlcHJlY2F0ZWQgIGNvZGUgZnJvbSBwYXJzZXIuYy4gTW9yZSBjbGVhbnVwIG9mIHBhcnNlci5jCgkqIHVyaS5jOiBmaXhlZCBhIHByb2JsZW0gd2hlbiBVUkkgaXMgTlVMTAoJKiB2YWxpZC5jOiBzcGVlZHVwIHdoZW4gbG9va2luZyBmb3IgYW4gYXR0cmlidXRlIGRlY2xhcmF0aW9uCgpTdW4gU2VwIDEwIDE3OjUzOjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB0cmVlLmMgU0FYLmMgcGFyc2VyLmMgZW50aXRpZXMuYyBkZWJ1Z1hNTC5jOiBmaW5pc2hlZAoJICB0aGUgY2xlYW51cCBvZiB0aGUgY29tcHV0YXRpb24gb2YgVVJJIHJlZmVyZW5jZXMgd2hlbiBzZWVraW5nCgkgIGV4dGVybmFsIGVudGl0aWVzLiBUaGUgVVJJIHJlZmVyZW5jZSBzdHJpbmcgYW5kIHRoZSByZXN1bHRpbmcKCSAgVVJJIGFyZSBib3RoIHN0b3JlZCBub3cuCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYyB2YWxpZC5jIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHhwYXRoLmM6CgkgIGxhcmdlIHMobilwcmludGYgY2hlY2tzIGFuZCBjbGVhbnVwIGZyb20gRGVuaXMgQmFyYmllcgoJICA8YmFyYmllckBpbWFjcy5wb2x5dGVjaG5pcXVlLmZyPgoJKiB4bWx2ZXJzaW9uLmguaW4gdHJlZS5oOiBjb3VwbGUgb2YgU0dNTCBkZWNsYXJhdGlvbnMgZm9yIGEKCSAgcG9zc2libGUgZG9jYm9vayBtb2R1bGUuCgkqIHJlc3VsdC9WQy8gOiBhIGNvdXBsZSBvZiB0ZXN0IG91dHB1dCBjaGFuZ2VkIGR1ZSB0byB0aGUgY2hhbmdlCgkgIG9mIHRoZSBlbnRpdGllcyBVUkkKClN1biBTZXAgMTAgMTU6NTk6NTggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5oOiBhZGRlZCBhIF9wcml2YXRlIGZpZWxkIGZvciBsaW5raW5nIHVzZXIncyBkYXRhCgpTdW4gU2VwIDEwIDE1OjE0OjQzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYyBwYXJzZXJJbnRlcm5hbHMuaDogZGVtYWNyb2lmaWVkIG1vc3Qgb2YgdGhlIElTX1hYWAoJICB0aGUgZ2FpbiBpbiBzaXplIGlzIHNpZ25pZmljYW50IHNvIC4uLgoKRnJpIFNlcCAgOCAyMDo0ODoyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYzogY2FzZXMgd2hlcmUgbG9va2luZyB1cCBlbnRpdGllcyB3aXRoIGRvYz09TlVMTAoJICBjb3ZlcmVkCgpUdWUgU2VwICA1IDEyOjQxOjE1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYzogYXBwbGllZCBXYXluZSBEYXZpc29uIHBhdGNoCgkqIE1ha2VmaWxlLmluIHRlc3QvVVJJL3VyaS5kYXRhIHJlc3VsdC9VUkkvdXJpLmRhdGE6IHVwZGF0ZWQgVVJJIHRlc3RzCgpNb24gU2VwICA0IDEzOjAxOjQ1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB0ZXN0VXJpLmM6IGFwcGxpZWQgV2F5bmUgRGF2aXNvbiBwYXRjaGVzCgkqIHRlc3QvVVJJL3VyaS5kYXRhIHJlc3VsdC9VUkkvdXJpLmRhdGE6IGZpcnN0IHNldCBvZiB0ZXN0cy9yZXN1bHRzCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBVUkl0ZXN0IGFuZCBpbmNsdWRlZCB0aGVuaW4gIm1ha2UgdGVzdHMiCgpTdW4gU2VwICAzIDE5OjE5OjI5IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWx2ZXJzaW9uLmguaW46IGNsb3NlZCBidWcgMjI5NDEKClRodSBBdWcgMzEgMTY6NTU6NTUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWxpby5odG1sOiBhZGRlZCBkb2MgYW5kIGV4YW1wbGUgZm9yIGVudGl0eSBsb2FkZXIKCSAgcmVkZWZpbml0aW9uLgoKVGh1IEF1ZyAzMSAxNDo1OToyOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbGlvLmh0bWwgZG9jL3htbC5odG1sOiBhZGRlZCBhIGRvYyBvbiB0aGUgSS9PIG1lY2hhbmlzbQoJICB1c2VkIGJ5IGxpYnhtbAoKVHVlIEF1ZyAyOSAyMDoyMjo1MyBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IEZpeGVkIGJ1ZyBvbiBpbnZhbGlkIG9udGVudCBjaGFyYWN0ZXJzIGFuZCB3aGVuIHVzaW5nCgkgIHB1c2guCgkqIHhtbGxpbnQuYzogZml4ZWQgeG1sbGludCBlbmRsaW5nIG9mIGVycm9ycyBpbiBwdXNoIG1vZGUKClR1ZSBBdWcgMjkgMTE6MjQ6NDggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYyB0ZXN0SFRNTC5jOiBhcHBsaWVkIHR3byBuZXcgcGF0Y2hlcyBmcm9tCgkgIFdheW5lIERhdmlzb24gPHdheW5lZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CgkqIHJlc3VsdC9IVE1MLyouc2F4OiByZWdlbmVyYXRlZCBIVE1MIFNBWCBvdXRwdXQKCSogcGFyc2VyLmM6IG1vcmUgY2xlYW51cC4KCk1vbiBBdWcgMjggMTE6NTg6MTIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuW2NoXSB0ZXN0SFRNTC5jOiBhcHBsaWVkIHRoZSBzZWNvbmQgc2V0IG9mCgkgIHBhdGNoZXMgZnJvbSBXYXluZSBEYXZpc29uIDx3YXluZWRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwKCSAgYWRkaW5nIGh0bWxFbmNvZGVFbnRpdGllcygpCgkqIEhUTUxwYXJzZXIuYzogZml4ZWQgYW4gaWdub3JhYmxlIHdoaXRlIHNwYWNlIGRldGVjdGlvbiBidWcKCSAgb2NjdXJpbmcgd2hlbiBwYXJzaW5nIHdpdGggU0FYIG9ubHkKCSogcmVzdWx0L0hUTUwvKi5zYXg6IHVwZGF0ZWQgc2luY2UgdGhlIG91dHB1dCBpcyBub3cgSFRNTAoJICBlbmNvZGVkLi4uCgpNb24gQXVnIDI4IDAwOjM4OjMxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF06IGFwcGxpZWQgc29tZSBvZiBXYXluZSBEYXZpc29uCgkgIDx3YXluZWRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBwYXRjaGVzCgpTdW4gQXVnIDI3IDIyOjE0OjAxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBTQVguYyB0cmVlLmMgZGVidWdYTUwuYzogZml4ZWQgYm9ndXMgYmVoYXZpb3VyIHdoZW4gYW4KCSAgdW5kZWNsYXJlZCBuYW1lc3BhY2UgcHJlZml4IHdhcyB1c2VkLCBhZGRlZCBhIHdhcm5pbmcuCgkgIENsZWFuZWQgdXAgc3VwcG9ydCB3LnIudC4gZW50aXRpZXMsIHNwaWxsaW5nIG91dCBhIHdhcm5pbmcKCSAgYW5kIGJlaW5nIHBlZGFudGljIG9uIGxvb2t1cHMuCgkqIHRlc3Qvd2FybmluZy9lbnQ5IDogYWRkZWQgdGVzdGNhc2UgZm9yIHByZXZpb3VzIGV4YW1wbGUuCgkqIFRPRE86IHVwZGF0ZWQKCSogcGFyc2VySW50ZXJuYWxzLmggcGFyc2VyLmM6IGNoYW5nZWQgdGhlIHdheSBuYW1lcyBhcmUgcGFyc2VkCgkgIG5vdyBhbGxvdyBpbmZpbml0ZSBzaXplIGFuZCBkZWNyZWFzZSBwZW5hbHR5IGZvciBub3JtYWwgdXNlCgkqIHBhcnNlci5jOiBTdGFydGVkIGEgYmlnIGNsZWFudXAvY2hlY2sgb2YgdGhlIHBhcnNlciBjb2RlLAoJICBmaXhlZCBzb21lIG9mIHRoZSBtb3N0IHRvcnR1b3VzIGVudGl0eSBjb2RlLCBzcG90dGVkIGNvZGUKCSAgdW51c2VkIGFueW1vcmUKCSogdGVzdC8qOiBhZGRlZCB0ZXN0cyBmb3IgdmVyeSBsb25nIG5hbWVzIGFuZCByZWxhdGVkIG5hc3R5CgkgIHRoaW5ncy4KClNhdCBBdWcgMjYgMjM6MzE6MDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9lbmNvZGluZy5odG1sOiBhZGRlZCBlbmNvZGluZyBhbGlhc2VzIGRvYwoJKiBkb2MveG1sLmh0bWw6IHVwZGF0ZXMKCSogZW5jb2RpbmcuW2NoXTogYWRkZWQgRW5jb2RpbmdBbGlhc2VzIGZ1bmN0aW9ucwoJKiBlbnRpdGllcy5bY2hdIHZhbGlkLltjaF0gZGVidWdYTUwuYzogcmVtb3ZlZCB0d28gc2VyaW91cwoJICBib3R0bGVuZWNrIGFmZmVjdGluZyBsYXJnZSBEVERzIGxpa2UgRG9jYm9vawoJKiBwYXJzZXIuW2NoXSB4bWxsaW50LmM6IGFkZGVkIGEgcGVkYW50aWMgb3B0aW9uLCB3aWxsIGJlCgkgIHVzZWZ1bAoJKiBTQVguYzogcmVkZWZpbml0aW9uIG9mIGVudGl0aWVzIGlzIHJlcG9ydGVkIGluIHBlZGFudGljIG1vZGUKCSogdGVzdEhUTUwuYzogdW5pbml0aWFsaXplZCB3YXJuaW5nIGZyb20gZ2NjCgkqIHVyaS5jOiBmaXhlZCBhIGNvdXBsZSBvZiBidWdzCgkqIFRPRE86IGFkZGVkIGlzc3VlIHJhaXNlZCBieSBNaWNoYWVsCgpXZWQgQXVnIDIzIDAxOjUwOjUxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvZW5jb2RpbmcuaHRtbDogcHJvcGFnYXRlZCBNYXJ0aW4gRHVlcnN0IHN1Z2dlc3Rpb25zCgpXZWQgQXVnIDIzIDAwOjIzOjQxIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogRml4ZWQgQnVnIzIxNTUyOiBsaWJ4bWwgZmFpbHMgdG8gZGVjb2RlICZhbXA7CgkqIHVyaS5jIHRlc3RVcmkuYyBwYXRjaGVzLCBieSBNYXJjIFNhbmZhY29uICgxIGxlZnQpCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogSFRNTC9lbmNvZGluZyBwdXNoIHByb2JsZW1zIHJlcG9ydGVkaQoJICBieSBXYXluZSBEYXZpc29uCgpTdW4gQXVnIDIwIDE3OjAzOjM4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogc21hbGwgY2xlYW51cAoJKiBUT0RPOiB1cGRhdGVkCgpTYXQgQXVnIDE5IDIyOjU3OjAyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCBhbiBvbGQgVkMgdGVzdGNhc2UgYW5kIHVwZGF0ZWQgdGl0bGUueG1sIGVudGl0eQoKU2F0IEF1ZyAxOSAyMTowMjowOCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIFNBWC5jIHRyZWUuYyBIVE1MdHJlZS5oIHJlc3VsdC9IVE1MLyo6IHdvcmsKCSAgZG9uZSBvbiBhdXRvLW9wZW5pbmcgb2YgPHA+IHRhZ3MgYW5kIGNsZWFudXAgb2YgU0FYIG91dHB1dAoKU2F0IEF1ZyAxOSAxODo0NTo0MCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbGlieG1sLjQgIHhtbGxpbnQuMSBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbjogYWRkZWQgbWFuIHBhZ2VzCgpTYXQgQXVnIDE5IDE4OjM4OjUzIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwgbGlieG1sLiogc3RydWN0dXJlLio6IHVwZGF0ZWQgdGhlIGRvYyBhIGJpdAoKVGh1IEF1ZyAxNyAxNTo1MDowMCBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdGVzdFNBWC5jIHRlc3RIVE1MLmMgcmVzdWx0L0hUTUwvOiBjbGVhbnVwIG9mIHRoZSBvdXRwdXQKCSAgb2YgU0FYIHRlc3RzCgpNb24gQXVnIDE0IDEzOjU2OjMzIEVEVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFBhdGNoIGZyb20gQWxiZXJ0IENoaW4tQS1Zb3VuZyA8Y2hpbmFAdGhld3JpdHRlbndvcmQuY29tPjoKCSogeG1sbGludC5jOiB3b3JrYXJvdW5kIGEgTUFQX0ZBSUxFZCBkZWZpbml0aW9uIGJ1ZyBpbiBEVS00LjAKCk1vbiBBdWcgMTQgMTE6MTA6MjAgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUGF0Y2ggZnJvbSBEYXZlIFllYXJrZSA8eWVhcmtlQGVuZy5idWZmYWxvLmVkdT46CgkqIHRlc3RIVE1MLmM6IGZpeCBjb3JlIGR1bXAgb24gU29sYXJpcyAyLnggc3lzdGVtcwoJKiBIVE1McGFyc2VyLmM6IGZpeCBzZWdmYXVsdCBpZiBjdHh0LT5zYXgtPmNoYXJhY3RlcnMoKSBpcyBOVUxMCgkqIHJlc3VsdC9IVE1MLyouc2F4OiBwcmV2aW91cyBidWcgZml4IGxlYWQgdG8gbmV3IHJlc3VsdHMKCk1vbiBBdWcgMTQgMTA6MjY6MDkgRURUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogUGF0Y2ggZnJvbSBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+OgoJKiBjb25maWd1cmUuaW46IGFkZGVkIC0td2l0aC1yZWFkbGluZT1ESVIgdG8gYWNjZXB0IGFsdGVybmF0ZQoJICBwYXRoIGZvciByZWFkbGluZSBpbmNsdWRlL2xpYnJhcnkKCSogY29uZmlndXJlLmluOiBhZGRlZCBBTV9DX1BST1RPVFlQRVMgdG8gYWRkIC1BYSAtRF9IUFVYX1NPVVJDRQoJICBmb3IgQU5TSSB1bmRlciBIUC1VWAoJKiBjb25maWcuaW46IFJlbW92ZWQgQExJQlNAIGZyb20geG1sLWNvbmZpZyBiZWNhdXNlIEBYTUxfTElCU0AKCSAgaW5jbHVkZXMgQExJQlNACgpTYXQgQXVnIDEyIDIzOjE5OjQyIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKCSogZ2V0dGluZyByZWFkeSBmb3IgMi4yLjIgcmVsZWFzZQoKU2F0IEF1ZyAxMiAxNjo0MjozNyBFRFQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXTogYWRkZWQgeG1sR2V0RmVhdHVyZXNMaXN0KCkgeG1sR2V0RmVhdHVyZSgpCgkgIGFuZCB4bWxBZGRGZWF0dXJlKCkKCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxBZGRDaGlsZExpc3QoKQoJKiB4bWxsaW50LmM6IE1BUF9GQUlMRUQgbWFjcm8gdGVzdAoJKiBwYXJzZXIuaDogYWRkZWQgeG1sUGFyc2VDdHh0RXh0ZXJuYWxFbnRpdHkoKQoJKiB2YWxpZC5jOiBhcHBsaWVkIGJ1ZyBmaXhlcyByZW1vdmVkIHdhcm5pbmcKCSogdHJlZS5jOiBhZGRlZCBDREFUQSBibG9jayB0byBlbGVtZW50cyBjb250ZW50CgkqIHRlc3RTQVguYzogY2xlYW51cCBvZiBvdXRwdXQKCSogdGVzdEhUTUwuYzogYWRkZWQgU0FYIHRlc3RpbmcKCSogZW5jb2RpbmcuYzogYmV0dGVyIGVycm9yIHJlY292ZXJ5CgkqIFNBWC5jLCBwYXJzZXIuYzogZml4ZWQgb25lIG9mIHRoZSBleHRlcm5hbCBlbnRpdHkgcHJvY2Vzc2luZwoJICBvZiB0aGUgT0FTaXMgdGVzdHN1aXRlCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBIVE1MIFNBWCByZWdyZXNzaW9uIHRlc3RzCgkqIGNvbmZpZ3VyZS5pbjogYnVtcGVkIHRvIDIuMi4yCgkqIHRlc3QvSFRNTC8gcmVzdWx0L0hUTUw6IGFkZGVkIGEgZmV3IG9mIEhUTUwgdGVzdHMsIGFuZCBhZGRlZCB0aGUKCSAgU0FYIHJlc3VsdHMKCkZyaSBBdWcgIDQgMTE6MjE6NTAgUERUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBwYXRjaCBmb3IgSFAgY29tcGlsZXIKCjIwMDAtMDgtMDQgIFN2ZW4gSGVpbmlja2UgIDxzdmVuQHplbi5vcmc+CgoJKiB4bWxsaW50LmM6IFdhcyBjb3JlZHVtcGluZyBzb21ldGltZXMgd2hlbiB0aGUgZmlsZSBnaXZlbiBkaWRuJ3QKCWV4aXN0LgoKU2F0IEp1bCAyMiAwNTo1OTowNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgeG1sSU8uW2NoXTogZml4ZWQgdGhlIHByb2JsZW0gb2YgZW5jb2Rpbmcgc3VwcG9ydAoKCSAgd2hlbiB1c2luZyBpbiBtZW1vcnkgcGFyc2luZy4gTmVlZCBzb21lIGNsZWFudXAuCgkqIHhtbGxpbnQuYyBjb25maWd1cmUuaW46IGFkZGVkIGEgLS1tZW1vcnkgZmxhZyB0byB0ZXN0IG1lbW9yeQoJICBwYXJzaW5nCgpGcmkgSnVsIDIxIDE3OjA5OjU3IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jOiBmaXhlZCBzb2NrbGVuX3QgcmVwbGFjZW1lbnQgdG8gdW5zaWduZWQgaW50CgkqIHBhcnNlci5jOiBmaXhlZCBhIHNwYWNlIGhhbmRkbGluZyBtaXNzaW5nIGF0IHRoZSBlbmQgb2YKCSAgcHJvZHVjdGlvbiAyOCBET0NUWVBFLgoJKiB4bWxtZW1vcnkuYzogZml4ZWQgYSBzdHVwaWQgYnVnIG9uIHRoZSByb3V0aW5lIHRvIG92ZXJyaWRlCgkgIGFsbG9jYXRpb24gZnVuY3Rpb25zCgkqIFRPRE86IHVwZGF0ZWQKCkZyaSBKdWwgMTQgMTc6MDE6MTQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8gcmVnZW5lcmF0ZWQgdGhlIGRvY3MKCkZyaSBKdWwgMTQgMTY6MTI6MjAgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy9lbmNvZGluZy5odG1sIGRvYy94bWwuaHRtbDogYWRkZWQgSTE4TiBkb2MKCSogZW5jb2RpbmcuW2NoXSBIVE1MdHJlZS5bY2hdIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogSTE4TiBlbmNvZGluZwoJICBpbXByb3ZlbWVudHMsIGJvdGggcGFyc2VyIGFuZCBmaWx0ZXJzLCBhZGRlZCBBU0NJSSAmIEhUTUwsCgkgIGZpeGVkIHRoZSBJU08tTGF0aW4tMSBvbmUKCSogeG1sbGludC5jIHRlc3RIVE1MLmM6IGFkZGVkL21hZGUgdmlzaWJsZSAtLWVuY29kZQoJKiBkZWJ1Z1hNTC5jIDogY2xlYW51cAoJKiBtb3N0IC5jIGZpbGVzOiBhcHBsaWVkIHBhdGNoZXMgZHVlIHRvIHdhcm5pbmcgb24gV2luZG93cyBhbmQKCSAgd2hlbiB1c2luZyBTdW4gUHJvIGNjIGNvbXBpbGVyCgkqIHhwYXRoLmMgOiBjbGVhbnVwIG1lbWxlYWtzCgkqIG5hbm9mdHAuYyA6IGFkZGVkIGEgVEVTVElORyBwcmVwcm9jZXNzb3IgZmxhZyBmb3Igc3RhbmRhbG9uZwoJICBjb21waWxlIHNvIHRoYXQgcGVvcGxlIGNhbiByZXBvcnQgYnVncyBtb3JlIGVhc2lsbHkKCSogbmFub2h0dHAuYyA6IGRpdGNoZWQgc29ja2xlbl90IHdoaWNoIHdhcyBhIHBvcnRhYmlsaXR5IG1lc3MKCSAgYW5kIHJlcGxhY2VkIGl0IHdpdGggdW5zaWduZWQgaW50LgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbEhhc1Byb3AoKQoJKiBUT0RPOiB1cGRhdGVkCgkqIHRlc3QvIDogYWRkZWQgbW9yZSB0ZXN0IGZvciBlbnRpdGllcywgTlMsIGVuY29kaW5nLCBIVE1MLCB3YXAKCSogY29uZmlndXJlLmluOiBwcmVwYXJpbmcgZm9yIDIuMi4wIHJlbGVhc2UKCk1vbiBKdWwgMTAgMTY6MTc6MTggQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYzogZml4ZWQgdGhlIHdheSB0aGUgY29udHJvbCBjb25uZWN0aW9uIGlzIGhhbmRsZWQKCSogbGlieG1sLnNwZWMuaW46IGZpeGVkIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNsZWFudXAKCk1vbiBKdWwgIDMgMTQ6Mzc6MDcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbDogY2hhbmdlZCB0aGUgeG1sc29mdC5vcmcgc3RydWN0dXJlLCB1cGRhdGVkIHRoZQoJICBleGFtcGxlcyB3LnIudC4gcm9vdCBhbmQgY2hpbGRzCgpTdW4gSnVsICAyIDIwOjUxOjQzIE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBsaWJ4bWwuc3BlYy5pbjogZml4ZWQgYnVnICM3NDE5LCBkZXBlbmRlbmNpZXMgZm91bGVkIGZvciBsaWJ4bWwtZGV2ZWwKClN1biBKdWwgIDIgMDk6NTI6NDUgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIEhUTUxwYXJzZXIuYzogV29yayBvbiBjaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydCBmb3IgdGhlIEhUTUwgcGFyc2VyCgkqIEhUTUxwYXJzZXIuYzogRml4ZWQgc29tZSBhdXRvb3Blbi9hdXRvY2xvc2UgcHJvYnMgZm9yIHRoZSBIVE1MIHBhcnNlcgoJKiBlbmNvZGluZy5jOiBGaXhlZCBhIHBvdGVudGlhbCBtZW1sZWFrIGluIHRoZSBlbmNvZGluZyBzdHVmZgoKU2F0IEp1bCAgMSAxMzo0NDoyMiBNRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL0ZBUS5odG1sIGRvYy9NYWtlZmlsZS5hbSA6IGFkZGVkIGEgRkFRCgpGcmkgSnVuIDMwIDIwOjI5OjA4IE1FU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgSFRNTHRyZWUuYyBTQVguYyB2YWxpZC5jIHRyZWUuaCA6IG1vcmUgY2xlYW51cAoJICBvZiB0aGUgSFRNTCBwYXJzZXIgdG8gZm9yY2UgaXQgdG8gbm90IGJ5cGFzcyBTQVgKCkZyaSBKdW4gMzAgMTE6MTk6NTkgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHdpbjMyY29uZmlnLmguaW46IHVwZGF0ZWQKCSogeG1sdmVyc2lvbi5oLmluOiBjcmFwIGZvcmdvdCB0byB1cGRhdGUgdGhpcywgdGhpcyBtZWFuIDIuMS4wCgkgIGxhY2tzIGljb252IHN1cHBvcnQgOi0oIG5lZWQgdG8gcmVsZWFzZSAyLjEuMQoJKiBjb25maWd1cmUuaW46IHJlbGVhc2UgMi4xLjEKCSogSFRNTHBhcnNlcjogZml4ZWQgYnVnICMxNDc4NAoJKiB4cGF0aC5jIEhUTUxwYXJzZXIuYyBlbmNvZGluZy5jIHBhcnNlci5jOiBmaXggd2FybmluZyByYWlzZWQKCSAgYnkgV2luZG93cyBjb21waWxlcgoJKiBIVE1McGFyc2VyLmMgU0FYLmMgSFRNTHRyZWUuaCB0cmVlLmg6IGNyZWF0ZSBIVE1MIGRvY3VtZW50IGluCgkgIHRoZSBTQVggc3RhcnREb2N1bWVudCgpIGNhbGxiYWNrLgoJKiBUT0RPOiB1cGRhdGVkCgpUaHUgSnVuIDI5IDEyOjA2OjQ4IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCB4bWxTdG9wUGFyc2VyKCkKCldlZCBKdW4gMjggMjM6MTA6MjYgTUVTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogMi4xLjAgcHJlcmVsZWFzZQoJKiBMYXJnZSByZXN5bmMgYmV0d2VlbiBXM0MgYW5kIEdub21lIHRyZWUKCSogbmFub2Z0cCwgbmFub2h0dHAuYzogZml4ZWQgc3RhbGxlZCBjb25uZWN0aW9ucyBwcm9icwoJKiBIVE1MdHJlZS5jIFNBWC5jIDogc3VwcG9ydCBmb3IgYXR0cmlidXRlIHdpdGhvdXQgdmFsdWVzIGluCgkgIEhUTUwgZm9yIGFuZGVyc2NhCgkqIHZhbGlkLmM6IEZpeGVkIG1vc3QgdmFsaWRhdGlvbiArIG5hbWVzcGFjZSBwcm9ibGVtcwoJKiBIVE1McGFyc2VyLmM6IHN0YXJ0IGRvY3VtZW50IGNhbGxiYWNrIGZvciBhbmRlcnNjYQoJKiBkZWJ1Z1hNTC5jIHhwYXRoLmM6IGxvdHMgb2YgWFBhdGggZml4dXBzIGZyb20gUGljZGFyIFRlY2hub2xvZ3kKCSogcGFyc2VyLmgsIFNBWC5jOiBzZXJpb3VzIHNwZWVkIGltcHJvdmVtZW50IGZvciBsYXJnZQoJICBDREFUQSBibG9ja3MKCSogZW5jb2RpbmcuW2NoXSB4bWxJTy5bY2hdOiBJbXByb3ZlZCBzZXJpb3VzbHkgc2F2aW5nIHRvCgkgIGRpZmZlcmVudCBlbmNvZGluZwoJKiBleGFtcGxlL01ha2VmaWxlLmFtIGV4YW1wbGUvZ2pvYnJlYWQuYyB0cmVlLmg6IHdvcmsgb24gCgkgIGxpYnhtbDEgbGlieG1sMiBjb252ZXJnZW5jZS4KCSogY29uZmlnLmguaW4gcGFyc2VyLmMgeG1sbGludC5jOiBhZGRlZCB4bWxDaGVja1ZlcnNpb24oKQoJICBhbmQgdGhlIExJQlhNTF9URVNUX1ZFUlNJT04gbWFjcm8KCkZyaSBKdW4gMjMgMjI6MjY6MDcgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbDogdmFyaW91cyBwYXRjaGVzIGFuZCBpbXByb3ZlbWVudHMgdHlwbyBmaXhlZCBieQoJICBGZWxpeCBOYXR0ZXIKCSogZG9jL2xpYnhtbC1kb2MuZWw6IEVtYWNzIG1vZHVsZSB0byBsb29rdXAgdGhlIGxpYnhtbCBkb2N1bWVudGF0aW9uCgkgIGZyb20gRmVsaXggTmF0dGVyIDxmbmF0dGVyQGdteC5uZXQ+CgpTYXQgTWF5ICA2IDEwOjA5OjQ1IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvdXBncmFkZS5odG1sOiB1cGRhdGVkIHdpdGggaW5zdHJ1Y3Rpb25zIGZvciBzdXBwb3J0IG9mIGJvdGgKCSAgbGlieG1sLTEueCBhbmQgbGlieG1sLTIueAoJKiBkb2MvZ2pvYnJlYWQuYyA6IGFwcGxpZWQgVG9kZCBEdWtlcyA8dGR1a2VzQGlibW90by5jb20+IHBhdGNoCgkgIGZvciAyLnggc3VwcG9ydCBhbmQgYWxzbyBmaXhlZCBpbmNsdWRlcwoKV2VkIE1heSAgMyAxNDoyMToyNSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW5jb2RpbmcuW2NoXSwgeG1sSU8uW2NoXSwgcGFyc2VyLmMsIGNvbmZpZ3VyZS5pbiA6IHJldmFtcGVkCgkgIHRoZSBlbmNvZGluZyBzdXBwb3J0LCBhZGRlZCBpY29udiBzdXBwb3J0LCBzbyBub3cgbGlieG1sIGlmCgkgIGNvbXBpbGVkIHdpdGggaWNvbnYgYXV0b21hdGljYWxseSBzdXBwb3J0IGphcGFuZXNlIGVuY29kaW5ncwoJICBhbW9uZyBvdGhlcnMuIFdvcmsgYmFzZWQgb24gaW5pdGlhbCBwYXRjaCBmcm9tIFl1YW4tQ2hlbiBDaGVuZwoJICBJIG1heSBoYXZlIGJyb2tlbiBiaW5hcnkgY29tcGF0IGluIHRoZSBlbmNvZGluZyBoYW5kbGVyCgkgIHJlZ2lzdHJhdGlvbiBzY2hlbWUsIGJ1dCB0aGF0IHdhcyBzbyB1dHRlcmx5IGJyb2tlbiBJIGRvbid0CgkgIGV4cGVjdCBhbnlib2R5IHRvIGhhdmUgdXNlZCB0aGlzIGZlYXR1cmUgdW50aWwgbm93LgoJKiBwYXJzZXJJbnRlcm5hbHMuaDogZml4dXAgb24gdGhlIENIQVIgcmFuZ2UgbWFjcm8KCSogeG1sLWVycm9yLmgsIHBhcnNlci5jOiBjYXRjaCBVUkwvVVJJIGVycm9ycyB1c2luZyB0aGUgdXJpLmMKCSAgY29kZS4KCSogdHJlZS5bY2hdOiBhZGRlZCB4bWxCdWZmZXJHcm93KCksIHdhcyBuZWVkZWQgZm9yIGljb252CgkqIHVyaS5jOiBhZGRlZCB4bWxQYXJzZVVSSSgpIEkgY2FuJ3QgYmVsaWV2ZSBJIGZvcmdvdCB0bwoJICBpbXBsZW1lbnQgdGhpcyBvbmUgaW4gMi4wICEhIQoJKiBTQVguYzogbW92ZWQgZG9jLT5lbmNvZGluZyB1cGRhdGUgaW4gdGhlIGVuZERvY3VtZW50KCkgY2FsbC4KCSogVE9ETzogdXBkYXRlZC4KCk1vbiBBcHIgMjQgMTM6MzA6MTMgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuaDogcmVtb3ZlZCBleHRyYW5lb3VzIHhtbFJlbW92ZVByb3AgZGVmaW5pdGlvbgoJKiBUT0RPOiBhZGRlZCBpdGVtIGFib3V0IC0tZGlzYWJsZS1jb3JiYSBjb25maWd1cmUgc3dpdGNoCgkqIHRyZWUuYyBwYXJzZXIuYzogZml4ZWQgcHJvYmxlbXMgZm9yIHhtbENvcHlEb2MgYW5kIHBvc3R2YWxpZGF0aW9uCgkqIG5hbm9mdHAuYzogZml4ZWQgaW5jbHVkZSBwcm9ibGVtcyBnaXZpbmcgdHJvdWJsZXMgb24gQUlYIGFuZCAKCSAgc2xvd2xhcmlzCgkqIHhtbElPLltjaF0gdmFsaWQuaCB0cmVlLltjaF0geGxpbmsuYyB4bWxtZW1vcnkuYyB1cmkuYyAKCSAgcGFyc2VyLmMgbmFub2Z0cC5jIG5hbm9odHRwLmMgU0FYLmMgdGVzdFNBWC5jIDoKCSAgY29tbWVudCBhbmQgaGVhZGVycyBjaGFuZ2VzIHRvIGxvd2VyIGd0ay1kb2MgbnVtYmVyIG9mIHdhcm5pbmdzCgkqIGRvYy9odG1sLyo6IHJlYnVpbHQgZG9jcwoKU3VuIEFwciAxNiAxMToyMzoyOSBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSEFDS0lORzogZG9jdW1lbnRlZCB0aGUgdGFnIGZvciAxLnggYW5kIGluc3RydWN0aW9ucwoKV2VkIEFwciAxMiAxNTo0NzoyMiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sSU8uW2NoXSBwYXJzZXIuW2NoXTogTW9yZSBpbnRlcmZhY2VzIGZvciBuZXcgSS9PIGZ1bmN0aW9ucwoJICB4bWxOZXdJT0lucHV0U3RyZWFtLCB4bWxQYXJzZXJJbnB1dEJ1ZmZlckNyZWF0ZUlPLAoJICB4bWxDcmVhdGVJT1BhcnNlckN0eHQKCSogcGFyc2VyLmMgcGFyc2VySW50ZXJuYWxzLmg6IHNwZWVkdXAgb2YgSVNfQ0hBUiBsaWtlIG1hY3JvcywKCSAgc2lnbmlmaWNhbnQgb3ZlcmFsbCBpbXByb3ZlbWVudAoJKiB4bWxsaW50LmM6IGFkZGVkIEkvTyB0ZXN0IHRvIHhtbGxpbnQKCSogdGVzdFNBWC5jOiBhZGRlZCBhIHNwZWVkIHRlc3QKCSogZG9jLyogOiB1cGRhdGVkL3JlZ2VuZXJhdGVkCgpTYXQgQXByICA4IDE0OjU0OjU0IENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5jIHVyaS5oIHBhcnNlckludGVybmFscy5oOiBjb3NtZXRpYyBjaGFuZ2VzIGZyb20KCSAgIlRpbXVyIEkuIEJha2V5ZXYiIDx0aW11ckBiYXQucnU+LCBpbmNsdWRpbmcgbWFraW5nIAoJICB4bWxDcmVhdGVVUkkoKSBwdWJsaWMKCkZyaSBBcHIgIDcgMTg6MzU6MDIgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbElPLltjaF0gcGFyc2VyLmM6IGNsZWFuZSB1cCB0aGUgeG1sUGFyc2VySW5wdXRCdWZmZXIgbWVzcwoJICBhbmQgdGhlIGNvZGUgYXQgdGhlIHNhbWUgdGltZS4gQWRkZWQgYSBjbGVhbiBtZWNoYW5pc20gZm9yCgkgIG92ZXJsb2FkIG9yIGFkZGVkIGlucHV0IG1ldGhvZHM6IHhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MoKQoJKiB0cmVlLmM6IGZpeGVkIHhtbFByZXZTaWJsaW5nIGFuZCB4bWxOZXh0U2libGluZyBwZXIgCgkgIENocmlzdG9waGUgTGUgR2FsIChDaHJpc3RvcGhlLkxlLUdhbEBpbWFnLmZyKSBpbnB1dAoJKiBUT0RPOiB1cGRhdGVkCgkqIGRvYy8qIDogdXBkYXRlZC9yZWdlbmVyYXRlZAoJKiBkb2MvTWFrZWZpbGUuYW06IHR3ZWFrcyB0byBhdm9pZCBwcm9ibGVtIHdpdGggbGlieG1sIGxpbmsgaW4gdGhlCgkgIHNvdXJjZSBkaXIKCldlZCBBcHIgIDUgMjE6MTE6MzUgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRlc3RVUkkuYzogeWV0IGFub3RoZXIgZm9yZ290dGVuIGNvbW1pdCwgSSBzaG91bGQgZ2V0IHNvbWUgc2xlZXAgIQoKV2VkIEFwciAgNSAyMDozNjo0NiBDRVNUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbGludC5jOiBmb3Jnb3QgdG8gY29tbWl0IHRoaXMgdG9vID8KCldlZCBBcHIgIDUgMTY6MjI6NDQgQ0VTVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbHZlcnNpb24uaC5pbiA6IGZvcmdvdCB0byBjb21taXQgdGhpcyBwcmV2aW91c2x5CgpNb24gQXByICAzIDIxOjQ3OjEwIENFU1QgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmluZyBsaWJ4bWwtMi4wLjAgdmVyc2lvbiBsb29rcyBPayBzbyBmYXIKCSogUkVBRE1FIFRPRE86IHVwZGF0ZWQgZm9yIHJlbGVhc2UKCSogdXJpLmMgdXJpLmg6IGFkZGVkIGF1dGhvcml0eSBwYXJzaW5nL3NhdmluZwoJKiB1cmkuYyB0ZXN0VVJJLmMgTWFrZWZpbGUuYW06IG1vdmVkIHRoZSB0ZXN0aW5nIGNvZGUgdG8gdGVzdFVSSS5jCgkqIHhtbHZlcnNpb24uaC5pbiBjb25maWd1cmUuaW4gbmFub2Z0cC5bY2hdIG5hbm9odHRwLltjaF0gZW5jb2RpbmcuaAoJICBkZWJ1Z1hNTC5bY2hdIHhwYXRoLltjaF0geG1sSU8uYyB0ZXN0ZXIuYyB0ZXN0WFBhdGguYyB0ZXN0SFRNTC5jCgkgIHRyZWUuYyBIVE1MdHJlZS5jIEhUTUxwYXJzZXIuYyB0cmVlLmMgdHJlZS5oIHBhcnNlci5jCgkgIE1ha2VmaWxlLmFtIDogYWRkZWQgY29tcGlsZS10aW1lIGN1c3RvbWl6YXRpb24gb2YgbGlieG1sCgkgIC0td2l0aC1mdHAgLS13aXRoLWh0dHAgLS13aXRoLWh0bWwgLS13aXRoLXhwYXRoIC0td2l0aC1kZWJ1ZwoJICAtLXdpdGgtbWVtLWRlYnVnCgkqICouW2NoXSBhdXRvY29uZi5zaCA6IG1vdmVkIHRvIGFuIGFic29sdXRlIGFkcmVzc2luZyBvZiBpbmNsdWRlcyA6IAoJICAjaW5jbHVkZSA8bGlieG1sL3h4eC5oPiBJIGhvcGUgaXQgd29uJ3QgYnJlYWsgdG9vIG11Y2ggc3R1ZmYKCSAgYW5kIHdpbGwgYmUgbWFuYWdlYWJsZSBpbiB0aGUgZnV0dXJlLi4uCgkqIHhtbGxpbnQuYyBNYWtlZmlsZS5hbSBsaWJ4bWwuc3BlYy5pbiA6IHJlbmFtZWQgdGVzdGVyLmMgdG8geG1sbGludC5jCgkgIGFuZCBhZGRlZCB4bWxsaW50IHRvIHRoZSBpbnN0YWxsZWQgcHJvZ3JhbXMKCSogdXJpLmg6IGFkZGVkIHhtbEZyZWVVUkkoKQoKRnJpIE1hciAyNCAxNDozNToyMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB1cmkuYyB1cmkuaDogZmluaXNoZWQgdGhlIGVzY2FwaW5nIGhhbmRsaW5nLCB0aGUgYmFzZSBzdXBwb3J0CgkgIGFuZCB0aGUgVVJJIHBhdGggbm9ybWFsaXphdGlvbi4gTG9va3MgZ29vZCBqdXN0IGxhY2tzIHRoZQoJICBhdXRob3JpdHkgY29udGVudCBwYXJzaW5nIGNvZGUuCgkqIE1ha2VmaWxlLmFtOiBhZGRlZCBpbnN0cnVjdGlvbnMgdG8gZ2VuZXJhdGUgdGVzdFVSSQoJKiBUT0RPOiB1cGRhdGVkCgkqIGRvYy94bWwuaHRtbCwgZG9jL3NtYWxsZm9vdG9ubHkuZ2lmIGRvYy93M2MucG5nOiB1cGRhdGVkLAoJICBhZGRlZCBsaW5rcyBhbmQgaWNvbnMgZm9yIFczQyBhbmQgR25vbWUKCk1vbiBNYXIgMjAgMTQ6MDU6MjYgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5LltjaF0gOiBzZWVtcyBJIGZvcmdvdCB0byBhY3R1YWxseSB1cGRhdGUgdGhlIGZpbGVzIGluCgkgIHRoZSBsYXN0IGNvbW1pdCA6LSkKCSogZG9jL3htbC5odG1sIGRvYy9odG1sLyogOiB1cGRhdGVkIGFuZCB1cGxvYWRlZCB0aGUgZG9jcwoKTW9uIE1hciAyMCAxMjozMzo1MSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0L3ZhbGlkL2R0ZHMveGh0bWwqOiByZW1vdmVkIFJDUyBpbmZvcyAocGFpbiB3aXRoIENWUykKCSogVE9ETzogdXBkYXRlZAoJKiB4bWxtZW1vcnkuW2NoXSA6IGFkZGVkIHhtbE1lbVNldHVwKCkgYW5kIHhtbE1lbUdldCgpIHRvIG92ZXJyaWRlCgkgIGxpYnhtbCBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb24gd2l0aCBhbm90aGVyIHNldCAobGlrZSBnbWFsbG9jLwoJICBnZnJlZSkuCgkqIE1ha2VmaWxlLmFtLCB1cmkuYywgdXJpLmg6IGFkZGVkIGEgc2V0IG9mIGZ1bmN0aW9ucyB0byBkbwoJICBleGFjdCAobGl0dGVyYWx5IGNvcGllZCBmcm9tIHRoZSBSRkMgMjM5NiBwcm9kdWN0aW9ucykgcGFyc2luZwoJICBhbmQgaGFuZGxpbmcgb2YgVVJJLiBXaWxsIGJlIG5lZWRlZCBmb3IgWExpbmssIG9uZSBYTUwgV0ZDLCAKCSAgWE1MIEJhc2UgYW5kIHJldXNlZCBpbiB0aGUgbmFub1tmdHAvaHR0cF0gbW9kdWxlcy4gU3RpbGwgd29yawoJICB0byBiZSBkb25lLgoKVHVlIE1hciAxNCAyMDo1MjozNSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGxpYnhtbC5zcGVjLmluIDogbGlieG1sMgoJKiBkb2MvKiA6IHVwZGF0ZWQgdGhlIGRvYyBwYWdlLCByZWJ1aWx0IHRoZSBkb2NzCgpUdWUgTWFyIDE0IDE5OjExOjI5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFsbDogdGFnZ2VkIExJQl9YTUxfMV9YCgkqICouYyAqLmggOiB1cGRhdGVkIGZyb20gVzNDIENWUyB0cmVlCgkqIGNvbmZpZ3VyZS5pbiA6IDIuMC4wLWJldGEKCSogbGlieG1sLnNwZWMuaW4gOiBsaWJ4bWwyIHBhY2thZ2UgbmFtCgkqIHJlc3VsdC8qIDogbmV3IHZlcnNpb24gb2YgdGhlIHRlc3RzIG91dHB1dAoKTW9uIE1hciAgNiAwOTozNDo1MiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MveG1sLmh0bWwsIGRvYy91cGRhdGUuaHRtbDogdXBkYXRlZCBkb2NzLCAxLjguNwoKU2F0IE1hciAgNCAxNjoxNDo0MiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbHQgdGhlIGRvY3MKCSogcGFyc2VyLmM6IGZpbmFsIHBhdGNoIG9uICM2NzY2CgkqIHZhbGlkLmM6IHNtYWxsIHBhdGNoIG9uIHZhbGlkaXR5IGNoZWNrcy4KClNhdCBNYXIgIDQgMTI6Mzg6NDEgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3VwZ3JhZGUuaHRtbDogaW5zdHJ1Y3Rpb24gb24gaG93IHRvIHVwZ3JhZGUgZnJvbSAxLnggdG8gMi54CgkgIGFkZGVkCgkqIHBhcnNlci5jOiBhZGRpbmcgeG1sS2VlcEJsYW5rc0RlZmF1bHQoKSBhcyBhIHdheSB0byBtYW5hZ2UKCSAgY29tcGF0aWJpbGl0eSB3LnIudC4gWE1MIHNwZWMgYW5kIGV4aXN0aW5nIGNvZGUuCgpUaHUgTWFyICAyIDA0OjQ1OjE1IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBzZWVtcyBhIGJldHRlciBzb2x1dGlvbiB0byA8YT4gICA8L2E+IGV4aXN0cywKCSAgd2lsbCB0cnkgaXQgZm9yIGEgd2hpbGUKClRodSBNYXIgIDIgMDI6MjY6MTMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IHRyaWVkIHRvIHJlbW92ZSB0aGUgPGE+ICAgPC9hPiBnZW5lcmF0aW5nIDxhLz4KCSAgdGhpcyBpcyBoYXJkLiBMZWZ0IGEgZmxhZyBmb3IgdGhhdCBwdXJwb3NlLiBGaXhlZCBidWcgIzY3NjYKCSogY29uZmlndXJlLmluOiBwcmVwYXJlZCAxLjguNyBub3QgcmVsZWFzZWQsIGR1ZSB0byBwcmV2aW91cwoJICBwcm9ibGVtCgpUaHUgTWFyICAyIDAzOjAzOjUwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IGFwcGxpZWQgc2Vjb25kIHBhdGNoIGZyb20gUGF1bCBEdUJvaXMKClR1ZSBGZWIgMjkgMjM6NTU6MTMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZG9jL3htbC5odG1sIDogYXBwbGllZCBwYXRjaCBmcm9tIFBhdWwgRHVCb2lzCgpUaHUgRmViICAzIDE2OjM2OjM5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogZG8gYSBiaXQgb2YgYnVmZmVyaXphdGlvbiBpbiBwdXNoIG1vZGUuCgpUaHUgRmViICAzIDE1OjU5OjM3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYyBuYW5vaHR0cC5jIHRyZWUuYyBIVE1MdHJlZS5bY2hdIGRlYnVnWE1MLmMgeHBhdGguYzogRml4ZWQKCSAgY29tcGlsYXRpb24gd2FybmluZ3Mgb24gdmFyaW91cyBwbGF0Zm9ybXMuCgkqIHBhcnNlci5jOiBGaXhlZCAjNTI4MSB2YWxpZGl0eSBlcnJvciBjYWxsYmFja3MgYXJlIG5vdyBkZXNhY3RpdmVkCgkgIGJ5IGRlZmF1bHQgaWYgbm90IHZhbGlkYXRpbmcuCgpUaHUgRmViICAzIDEzOjQ2OjE0IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYywgd2luMzJjb25maWcuaC5pbjogcGF0Y2hlcyB0byBjb21waWxlIG9uIFdJTjMyCgpXZWQgRmViICAyIDIyOjUxOjE2IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuYzogc25wcmludGYvc3ByaW50ZiBwYXRjaCBjb3VydGVzeSBHZW9yZ2UgS2F0c2lyZWxvcwoJICA8Z2thdHNpQGNzLnRvcm9udG8uZWR1PgoKTW9uIEphbiAzMSAxODo1ODoyMSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vZnRwLmMgbmFub2h0dHAuYzogRml4ZWQgJyMnIGFuZCAnPycgc3RyaXBwaW5nIHdoZW4KCSAgcHJvY2Vzc2luZyBVUkxzCgpNb24gSmFuIDMxIDE0OjI1OjU3IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuW2NoXTogY2xlYW51cCwgYnVnIGZpeGVzLCBpbnRlZ3JhdGlvbiBpbiBycG1maW5kLCBhZGRlZAoJICB4bWxOYW5vRlRQVXBkYXRlVVJMIGZvciBwZXJzaXN0ZW50IGNvbnRyb2wgY29ubmVjdGlvbnMuCgkqIGNvbmZpZ3VyZS5pbjogMS44LjYKClRodSBKYW4gMjcgMTc6NTI6MjkgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2h0dHAuW2NoXSwgbmFub2Z0cC5bY2hdOiBjbGVhbnVwLCBhZGRlZCBwcm94eSBzdXBwb3J0CgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbFNhdmVOb0VtcHR5VGFncwoKMjAwMC0wMS0yOSAgSmFtZXMgSGVuc3RyaWRnZSA8amFtZXNAZGFhLmNvbS5hdT4KCgkqIG5hbm9mdHAuYzogaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiBmb3IgSVBQUk9UT19UQ1AuCgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgbmFub2Z0cC5bY2hdIHRvIHRoZSBidWlsZC4KCldlZCBKYW4gMjYgMTg6MTQ6NTUgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogbmFub2Z0cC5bY2hdOiBjbGVhbnVwLCBjb21tZW50cywgQVBJCgkqIGRlYnVnWE1MLmMgOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgY2F0IGNvbW1hbmQKCSogZG9jLyo6IHJlZ2VuZXJhdGVkIHRoZSBkb2NzCgpXZWQgSmFuIDI2IDE2OjUyOjUwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIG5hbm9mdHAuW2NoXSBwYXJzZXIuYyB4bWxJTy5bY2hdOiBhZGRlZCBhIE5hbm8gRlRQIGltcGxlbWVudGF0aW9uCgkqIGRlYnVnWE1MLmMgOiBmaXhlZCBhIGJ1ZyBpbiB0aGUgY2F0IGNvbW1hbmQKCSogdmFsaWQuYzogZml4aW5nIHNvbWUgc21hbGwgcHJvYnMKCSogbGlieG1sLnNwZWMuaW46IGdldCByaWQgb2YgdGhlIFNOQVAgc3VmZml4CgkqIGRvYy94bWwuaHRtbDogdXBkYXRlZCB0aGUgc3RhdHVzCgpNb24gSmFuIDI0IDE0OjMxOjA5IENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbC1jb25maWcuaW46IHhtbC1jb25maWcgLS12ZXJzaW9uIHRvIGp1c3QgcmV0dXJuIHRoZQoJICB2ZXJzaW9uIG51bWJlcgoJKiB4cGF0aC5jOiBzb21lIGNsZWFudXAgdy5yLnQuIGF4aXMgd2hlbiB0aGUgY3VycmVudCBub2RlIGlzCgkgIGFuIGF0dHJpYnV0ZS4KCSogVE9ETzogdXBkYXRlZAoKVHVlIEphbiAxOCAxODo0NjowNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW46IHByZXBhcmVkIGZvciBsaWJ4bWwtMS44LjUKCSogZG9jLyogcmVjb21waWxlZCB0aGUgZG9jdW1lbnRhdGlvbgoKMjAwMC0wMS0xNyAgSm9keSBHb2xkYmVyZyA8amdvbGRiZXJnQGhvbWUuY29tPgoKCSogY29uZmlndXJlLmluIDogV0FSTklORyBhdXRvY29uZiBzdWJ0bGV0eSBhbGVydCA6CgkgIFVzZSBBQ19DSEVDS19IRUFERVJTIHJhdGhlciB0aGFuIEFDX0NIRUNLX0hFQURFUgoJICB3aGVuIGxvb2tpbmcgZm9yIHpsaWIuaCBzbyB0aGF0IEhBVkVfWkxJQl9IIGlzIGRlZmluZWQuCgkqIGNvbmZpZy5oLmluIDogSGF2ZSBhICN1bmRlZiBmb3IgSEFWRV9aTElCX0ggc28gdGhhdCBpdCB3aWxsCgkgIGdldCBkZWZpbmVkIGJ5IEFDX0NIRUNLX0hFQURFUlMuCgpNb24gSmFuIDE3IDE3OjA0OjEyIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogZml4ZWQgYSBoaWRlb3VzIGJ1ZyBpbiB4bWxHZXRQcm9wKCkgdGhhbmtzIHRvCgkgIFJ1bmUuRGp1cmh1dXNAZmFzdC5ubwoKU2F0IEphbiAxNSAxNTowOTowNiBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBUT0RPOiB1cGRhdGVkCgkqIHRyZWUuYywgcGFyc2VyLmM6IG1hZGUgc3VyZSB0aGF0IG9ubHkgbWVtb3J5IGFsbG9jIHByb2JsZW1zCgkgIGFuZCBpbnRlcm5hbCBwYXJzZXIgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIHdyaXRlIHRvIHN0ZG91dCBvcgoJICBzdGRlcnIuCgpUaHUgSmFuIDEzIDExOjQ5OjExIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYyA6IHJlc3RvcmVkIHhtbE5ld0dsb2JhbE5zIHNpbmNlIHRoaXMgc2VlbXMgdXNlZCBieQoJICBhIGxvdCBvZiBleGlzdGluZyBjb2RlIDotKCwgZml4ZWQgYSBidWcgaW4geG1sTmV3TnMKCSogbmFub2h0dHAuYzogZml4ZWQgYSBwcm9ibGVtIHdpdGggSU5DTFVERV9XSU5TT0NLCgkqIEhUTUxwYXJzZXIuYywgcGFyc2VyLmMsIGVudGl0aWVzLmMsIHZhbGlkLmMgOiByZW1vdmVkIGFsbCBjYWxscwoJICB0byBleGl0KCkgZnJvbSB0aGUgbGlicmFyeSBjb2RlLgoJKiB4cGF0aC5jLCBwYXJzZXIuYzogcmVtb3ZlZCBidWdzIG9yIHVudXNlZCBjb2RlIGRldGVjdGVkIGJ5IAoJICBXaW5kb3dzIGNvbXBpbGVycwoJKiBwYXJzZXIuYzogc3RhcnRlZCBhZGRpbmcgaW50ZXJmYWNlcyBmb3IgcGFyc2luZyB3ZWxsIGJhbGFuY2VkCgkgIFhNTCBmcmFnbWVudHMKCSogY29uZmlndXJlLmluOiByZWxlYXNpbmcgMS44LjQKCSogZG9jLyogOiByZWJ1aWx0IHRoZSBkb2NzCgpTdW4gSmFuICA5IDIzOjAzOjIwIENFVCAyMDAwIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXSA6IGFkZGVkIHhtbE5ld0RvY0ZyYWdtZW50KCkgZm9yIERPTQoJKiB0ZXN0SFRNTC5jOiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgoKV2VkIEphbiAgNSAxNzoyOToxNyBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBkb2MvKiA6IHJlYnVpbGQgdGhlIGRvY3MKCldlZCBKYW4gIDUgMTc6MDg6NDMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYWNjb25maWcuaDogcmVhZGxpbmUgYW5kIGhpc3RvcnkgcGF0Y2gKCSogdmFsaWQuW2NoXTogYWRkZWQgeG1sUmVtb3ZlSUQoKSBhbmQgeG1sUmVtb3ZlUmVmKCkKCSogdHJlZS5jOiBhZGRlZCBjaGVjayBhbmQgaGFuZGxpbmcgd2hlbiBwb3NzaWJseSByZW1vdmluZyBhbiBJRAoJKiB0cmVlLmMsIEhUTUxwYXJzZXIuaCwgSFRNTHRyZWUuaDogZml4ZWQgZW50aXRpZXMgcGFyc2luZwoJICAgICBhbmQgc2F2aW5nLgoJKiB0ZXN0L0hUTUwvZW50aXRpZXMuaHRtbCByZXN1bHQvSFRNTC9lbnRpdGllcy5odG1sKiA6IHRlc3QgZm9yCgkgICAgIHZhcmlvdXMgZW50aXRpZXMgcmVmZXJlbmNlIGNhc2VzCgkqIHJlc3VsdC9IVE1MLyogOiBhcyBhIHJlc3VsdCBvdXRwdXQgb2Ygc29tZSB0ZXN0Y2FzZSBoYXZlCgkgICAgIGNoYW5nZWQKCSogSFRNTHBhcnNlci5jLCBwYXJzZXIuYzogZml4ZWQgYSBidWcgaW4gdGhlIHB1c2ggbW9kZSB0cmlnZ2VyZWQKCSAgICAgYnkgcHJldmlvdXMgZXhhbXBsZS4gYWRkZWQgeG1sUGFyc2VUcnlPckZpbmlzaCgpLgoJKiB4cGF0aC5oIHRyZWUuaCBwYXJzZXIuaCB2YWxpZC5oIHhtbElPLmggeGxpbmsuaCBlbmNvZGluZy5oCgkgIGVudGl0aWVzLmggZGVidWdYTUwuaCBIVE1McGFyc2VyLmg6IGNoYW5nZWQgdGhlIHdheSBzdHJ1Y3QgYXJlIAoJICBkZWNsYXJlZCB0byBhbGxvdyBndGstZG9jIHRvIGV4cG9zZSB0aG9zZQoJKiBwYXJzZXIuYzogY2xvc2VkIGJ1ZyAjNDk2MCAgCgkqIE1ha2VmaWxlLmFtIGNvbmZpZ3VyZS5pbjogQXBwbGllZCBwYXRjaCBmcm9tIAoJICBBbGJlcnQgQ2hpbi1BLVlvdW5nIDxjaGluYUB0aGV3cml0dGVud29yZC5jb20+IGZvciBiZXR0ZXIgemxpYgoJICBhbmQgbWF0aC9zb2NrZXQgbGlicyBkZXRlY3Rpb24KCk1vbiBKYW4gIDMgMTg6Mjk6NDMgQ0VUIDIwMDAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluLCBNYWtlZmlsZS5hbTogbGluayB0ZXN0ZXIgYWdhaW5zdCByZWFkbGluZQoJKiBkb2MveG1sLmh0bWwgZG9jLyovKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbiBwYWdlcwoKTW9uIEphbiAgMyAxMTo1ODowNSBDRVQgMjAwMCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF06IGFkZGVkIHhtbFJlbW92ZVByb3AKCSogd2luMzJjb25maWcuaC5pbiBuYW5vaHR0cC5jOiBhdm9pZCBpbmNsdWRpbmcgdGhlIFdpbmRvd3MKCSAgICBzb2NrZXQgc3R1ZmYgaW4gZXZlcnkgQyBmaWxlcwoJKiBwYXJzZXIuYzogcmVtb3ZlZCBhbiBpbmRldGVybWluYXRpb24geG1MRGVjbC9QSSh4bWwuLi4pIGluCgkgICAgdGhlIFhtTCBwYXJzZXIocykKCSogdGVzdC9uczQgcmVzdWx0L25zNCBldGMuLi46IGFkZGVkIHRlc3QgY2FzZSBmb3IgcHJldmlvdXMgcHJvYiAgICAKCSogdHJlZS5jOiB4bWxOZXdOcyB3YXNuJ3QgY2hlY2tpbmcgZm9yIGRvdWJsZSBkZWZpbml0aW9uCgkqIE1ha2VmaWxlLmluOiBmaXhlZCBhIHByb2JsZW0gd2l0aCBkaXN0LWhvb2sgZHVwbGljYXRlcwoJKiBwYXJzZXIuW2hjXSwgeG1sSU8uYzogZml4ZWQgdGhlIGxvYWRpbmcgb2YgZXh0ZXJuYWwgZW50aXRpZXMKCSAgICBBUElzLCBub3cgeG1sTG9hZEV4dGVybmFsRW50aXR5KCkgaXMgdXNlZCBldmVyeXdoZXJlIGFuZAoJICAgIHNldHRpbmcgdXAgYW4gYXBwIHNwZWNpZmljIGZyb250LWVuZCB1c2luZyB0aGUgCgkqIFNBWC5jIHBhcnNlci5jOiBzb21lIGZpeGVzLCBub3cgdGhlIHhodG1sIHNwZWMgdmFsaWRhdGVzCgkgICAgd2l0aCB0aGUgeGh0bWwgRFRELgoJKiBlcnJvci5jOiBmaXhlZCBjcmFzaGVzIGluIGNhc2Ugb2Ygbm8gaW5wdXQgc3RyZWFtICAgIAoJKiB0ZXN0L3ZhbGlkL1tkdGRzL10veGh0bWwqIDogYWRkZWQgdGhlIHhodG1sIHNwZWMgYW5kIGR0ZHMKCSAgICB0byB0aGUgdmFsaWRhdGlvbiB0ZXN0cyBhbmQgcmVzdWx0cwoKV2VkIERlYyAyOSAxNToyOTo1MiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF0gdGVzdEhUTUwuYzogYWRkZWQgcHVzaCBtb2RlIGZvciB0aGUgSFRNTCBwYXJzZXIKCSAgdG9vIGh0bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCgpIGFuZCBodG1sUGFyc2VDaHVuaygpCgkqIHBhcnNlci5jOiBhIGJpdCBvZiBjbGVhbnVwLgoJKiBTQVguYywgSFRNTHBhcnNlci5jOiBzb21lIGF0dHJpYnV0ZXMgbWF5IG5vdCBoYXZlIHZhbHVlcyAoY29udHJhcnkKCSAgdG8gWE1MKSByZW1vdmVkIHRoZSBsYXN0IG1lbSBsZWFrIGtub3duCgkqIEhUTUx0cmVlLmM6IG91dHB1dCBtZXNzYWdlIGNsZWFudXAKCSogeG1sbWVtb3J5LmM6IGRpc3BsYXkgY29udGVudCBpbmZvIGFib3V0IG1lbW9yeSBibG9ja3MKCSogcmVzdWx0L0hUTUwvd2lyZWQuKiA6IG1pc3NpbmcgYXR0IHZhbHVlIHdhcm5pbmcgY2hhbmdlCgpUdWUgRGVjIDI4IDE3OjQyOjQxIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy8qIDogcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKVHVlIERlYyAyOCAxODo0NDoyMiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuaDogUHVzaCBwYXJzZXIgZm9yIFhNTCwKCSAgICAgc2VlbXMgdG8gd29yayBmaW5lIG5vdwoJKiB0ZXN0ZXIuYyBkZWJ1Z1hNTC5bY2hdOiBBZGRlZCBhbiBYTUwgc2hlbGwgZGVidWcgZmFjaWxpdHkgYW5kCgkgICAgIC0tcHVzaCBmb3IgcHVzaCB0ZXN0aW5nCgkqIHhwYXRoLltjaF0gOiBjbGVhbmVkIHVwIGZvciBTaGVsbCB1c2FnZSwgYWRkZWQgbWlzc2luZyBBUElzCgkqIHRlc3RTQVguYzogYWRkZWQgLS1wdXNoCgkqIEhUTUx0cmVlLltjaF0gdHJlZS5bY2hdOiBuZXcgZnVuY3Rpb25zIGZvciBkdW1waW5nIHBhcnRzIG9mIHRoZQoJICAgICBzdWJ0cmVlCgkqIHhtbElPLltjaF0gOiBlbnJpY2hlZCBBUEkgKyBmaXhlcyBmb3IgcHVzaCBtb2RlICAgICAKCSogZW50aXRpZXMuW2NoXTogYWRkZWQgdGhlIGVudGl0eSBjb250ZW50IGxlbmd0aCB0byB0aGUgc3RydWN0LgoJKiB4bWxtZW1vcnkuW2NoXTogbmV3IEFQSSB0byBzaG93IHRoZSBsYXN0IGVudHJpZXMgZm9yIHRoZSBzaGVsbAoJKiB2YWxpZC5jOiBhZGRlZCByZXF1aXJlZCBhdHRyaWJ1dGUgdGVzdGluZwoJKiBTQVguYzogdGhlIGNkYXRhIGNhbGxiYWNrIG5vdyBtZXJnZSBjb250aWd1b3VzIGZyYWdtZW50cwoJKiBIVE1McGFyc2VyLmM6IGNsZWFudXAgb2Ygc29tZSBtYWNyb3MKCldlZCBEZWMgMjIgMTI6MjA6NTMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGZpeCBmb3IgUElzIG5hbWUgc3RhcnRpbmcgd2l0aCB4bWwKCSogdHJlZS5jOiBmaXhlZCBhIHBvdGVudGlhbCBwcm9ibGVtIHdpdGggfHwgYW5kICYmIG9wcwoJKiAqLmMsIGNvbmZpZ3VyZS5pbiB3aW4zMmNvbmZpZy5oLmluIDogZ2VuZXJhdGUgd2luMzJjb25maWcuaCBmb3IKCSAgdGhvc2Ugb24gdGhlIE90aGVyIFNpZGUgIQoKVHVlIERlYyAyMSAxNzoyMjoxNyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBzdHVwaWQgPSB2cy4gPT0gYnVnIDotKAoJKiBkb2MvZ25vbWUteG1sLnNnbWw6IHMvZ2xhZGUveG1sLwoKVHVlIERlYyAyMSAxNDoyOTozNCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRvYy94bWwuaHRtbCA6IGJ1ZyBmaXggcmVsZWFzZSAxLjguMgoJKiBkZWJ1Z1hNTC5oIG5hbm9odHRwLmggeG1sLWVycm9yLmggeG1sbWVtb3J5LmggeHBhdGguaCA6IAoJICBIb3BlZnVsbHkgdGhlIGVuZCBvZiB0aGF0IHNpbGx5IEMrKyBpbmNsdWRlIHByb2JsZW0KCSogdHJlZS5bY2hdOiBBZGRlZCBhIGZldyBmdW5jdGlvbnM6IHhtbFJlcGxhY2VOb2RlLCB4bWxBZGRQcmV2U2libGluZywKCSAgICAgIHhtbEFkZE5leHRTaWJsaW5nLCB4bWxOb2RlU2V0TmFtZSBhbmQgeG1sRG9jU2V0Um9vdEVsZW1lbnQKCSogSFRNTHBhcnNlci5jIEhUTUxwYXJzZXIuaCBIVE1MdHJlZS5jOiBXaGVuIHNhdmluZyBIVE1MIHRyeSB0byBhdm9pZCAKCSAgICAgIHRyb3VibGVzIHdpdGggYXV0b2Nsb3NlZCBlbGVtZW50cyB3aGVuIHRoZSBzdHJlZSBzaGFwZSBkb2Vzbid0CgkgICAgICBmb2xsb3cgdGhlIER0RCBzcGVjcy4gQWRkZWQgaHRtbElzQXV0b0Nsb3NlZCgpIGFuZAoJICAgICAgaHRtbEF1dG9DbG9zZVRhZygpCgkqIHJlc3VsdC9IVE1MLyouaHRtKjogVXBkYXRlZCB0aGUgSFRNTCBleGFtcGxlcyByZWdyZXNzaW9uIHRlc3RzIG91dHB1dAoJKiBTQVguYyB0cmVlLmM6IGZpeGVkIGJ1ZyBvbiBkZWZhdWx0aW5nIG5hbWVzcGFjZXMgb24gYXR0cmlidXRlcwoJKiBkZWJ1Z1hNTC5jOiBmaXhlZCBhIGJ1ZyBvbiBwcmludGluZyBkZWZhdWx0IG5hbWVzcGFjZXMuCgkqIEhUTUx0cmVlLmM6IGZpeGVkIGEgcHJvYmxlbSB3aGVuIG91dHB1dGluZyBYTUwgcGFyc2VkIGRvY3MgYXMgSFRNTAoKTW9uIERlYyAyMCAxNjoyMDo1NSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiByZXN1bHQvSFRNTC8qLmh0bVtsXSA6IHVwZGF0ZWQgdGhlIEhUTUwgcmVncmVzc2lvbiB0ZXN0cyBhY2NvcmRpbmcKCSAgdG8gdGhlIG5ldyBvdXRwdXQKCSogeHBhdGguaCB4bWwtZXJyb3IuaCB2YWxpZC5oIHRyZWUuaCBwYXJzZXIuaCBlbnRpdGllcy5oIFNBWC5oCgkgIEhUTUx0cmVlLmggdHJlZS5jIGVudGl0aWVzLmM6IGhlYWRlcnMgdHdlYWtpbmdzIHRvIGF2b2lkIGEgbmFzdHkKCSAgcHJvYmxlbSBkdWUgdG8gaW50ZXJtaXggb2YgZXh0ZXJuICJDIiB7IC4uLiB9IGRlY2xhcmF0aW9ucyBmb3IgQysrCgkgIGFuZCByZWN1cnNpdmUgaW5jbHVkZXMgaW4gdGhlIGhlYWRlcnMKCjE5OTktMTItMjAgIENocmlzIExhaGV5ICA8Y2xhaGV5QHVtaWNoLmVkdT4KCgkqIEhUTUx0cmVlLmM6IE1hZGUgaXQgc28gdGhhdCBodG1sIG5vZGVzIHdpdGggYSBzaW5nbGUgY2hpbGQgZG8KCW5vdCBpbnNlcnQgYSBjYXJyaWFnZSByZXR1cm4gYmVmb3JlIG9yIGFmdGVyIHRoZSBjaGlsZCBub2RlLgoKU2F0IERlYyAxOCAxNjowNzowMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRvYy94bWwuaHRtbCA6IGJ1ZyBmaXggcmVsZWFzZSAxLjguMQoJKiBwYXJzZXIuYzogZml4ZWQgYnVnICM0MzQ0CgkqIHhwYXRoLmggeG1sLWVycm9yLmggeGxpbmsuaCBuYW5vaHR0cC5oIGRlYnVnWE1MLmggU0FYLmggSFRNTHBhcnNlci5oCgkgIGFkZGVkIHRoZSBnbHVlIHRvIGF2b2lkIEMrKyBwcm9ibGVtcwoJKiBkb2MvKiA6IHJlZ2VuZXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpUaHUgRGVjIDE2IDE2OjE5OjI5IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYzogZml4ZWQgYSBidWcgaW50cm9kdWNlZCBpbiAxLjguMCBhbmQgYnJlYWtpbmcgZGVmYXVsdAoJICBuYW1lc3BhY2UgcmVjb2duaXRpb24sIGFuZCBEaWEgYXMgYSByZXN1bCA6LSgKCSogZW5jb2RpbmcuYzogY2xvc2VkIGJ1ZyAjMzk1MAoKV2VkIERlYyAxNSAxOToyMjoyMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB2YWxpZC5jOiBkZWJ1Z2dpbmcgYSBwb3N0ZXJpb3JpIHZhbGlkYXRpb24sIGV4Y2VwdCBVUkkgZXhwYW5zaW9uCgkgIHN0dWZmIHRoaXMgc2hvdWxkIGJlIGZpeGVkIG5vdwoJKiBwYXJzZXJJbnRlcm5hbHMuaDogZml4ZWQgYSBidWcgaW4gSVNfQkFTRUNIQVIgcmVwb3J0ZWQgYnkKCSAgQ2FybCBOeWdhcmQgPGNueWdhcmRAYmVsbGF0bGFudGljLm5ldD4KCSogdGVzdGVyLmM6IGFkZGVkIC0tcG9zdHZhbGlkLCBjbGVhbmluZyBvZiB0aGUgY29kZQoJKiB0cmVlLltjaF06IGFkZGVkIHhtbERvY0dldFJvb3RFbGVtZW50KCkKClR1ZSBEZWMgMTQgMjA6MzA6MzQgUFNUIDE5OTkgUmFtaXJvIEVzdHJ1Z28gPHJhbWlyb0BlYXplbC5jb20+CgoJKiBTQVguaCwgdHJlZS5oIDogY2hhbmdlZCAnbmFtZXNwYWNlJyB0byAnbmFtZVNwYWNlJyB0byB3b3JrYXJvdW5kCgljKysgbG9zYWdlLgoKU3VuIERlYyAxMiAxMzowODoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBjb25maWd1cmUuaW4sIGRvYy94bWwuaHRtbCA6IGJ1bXBlZCB0byAxLjguMAoJKiB4bGluay5bY2hdLCBNYWtlZmlsZS5hbSA6IGFkZGVkIGZyYW1ld29yayBmb3IgbGluayBkZXRlY3Rpb24KCSogcGFyc2VyLmg6IGFkZGVkIG5iQ2hhcnMgdG8gcGFyc2VyIGNvbnRleHQsIG5lZWRlZCBmb3IgY2xlYW51cC4KCSogeG1sbWVtb3J5LmM6IHJlbW92ZWQgYSBuYXN0eSBidWcgd2hlbiBvdXQgb2YgbWVtCgkqIHZhbGlkLltjaF06IGFkZGluZyBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgYXR0cmlidXRlIGRlY2wKCSogdGVzdGVyLmM6IGFkZGVkIC0tZGVidWdlbnQgb3B0aW9uCgkqIGRlYnVnWE1MLltjaF06IGFkZGVkIHhtbERlYnVnRHVtcEVudGl0aWVzKCkKCSogcGFyc2VyLmM6IGNsZWFudXAsIGF2b2lkaW5nIHVzZSBvZiBDVVJfUFRSIGxpa2UgcGxhZ3VlLCB1c2luZwoJICBidWZmZXJzIGluc3RlYWQsIHRoaXMgd2FzIHJlYWxseSBuZWVkZWQsIHZhbGlkYXRpb24gd2FzIGJyZWFraW5nCgkgIGluIHN0cmFuZ2Ugd2F5cyBkdWUgdG8gdGhhdC4gQWRkZWQgeG1sUGFyc2VTdHJpbmdQRVJlZmVyZW5jZSgpCgkgIGFuZCBvdGhlciBwYXJzaW5nIGZyb20gc3RyaW5ncyBmdW5jdGlvbnMuIEVudGl0aWVzIHByb2Nlc3NpbmcKCSAgbW9kaWZpZWQgYWdhaW4sIGJ1dCBQRVJlZiBhcmUgc3RpbGwgbm90IGhhbmRsZWQgY29ycmVjbHkgYnV0CgkgIHVubGVzcyB5b3UncmUgRXZlIE1hbGxlciB5b3Ugd29uJ3Qgbm90aWNlIDotKQoJKiBIVE1McGFyc2VyLmM6IGxhcmdlIGNoYW5nZXMgdG93YXJkIHJlbGlhYmlsaXR5LCBhbmQgc3dpdGNoZWQgdG8KCSAgbG93ZXJjYXNlIGludGVybmFsIHRhZ3MsIFhIVE1MIGlzIGxvd2VyY2FzZSwgc28gaXQgd2lsbCBoZWxwCgkgIHRoYXQgb3V0cHV0IGlzIGNsb3NlciB0byBuZXh0IHZlcnNpb24uCgkqIGRvYy8qIDogcmVnZW5lcmF0ZWQgdGhlIGRvY3VtZW50YXRpb24sIGl0IGlzIG5vdyBob3N0ZWQgYXQKCSAgaHR0cDovL3htbHNvZnQub3JnLyAoc2FtZSBiaXRzIEkganVzdCBib3VnaHQgdGhlIGRvbWFpbiA6LSkKCkZyaSBEZWMgIDMgMTM6NDY6MzIgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmgsIFNBWC5jLCBtYWtlZmlsZS5hbTogYWRkZWQgU0FYLmggbW9zdGx5IHVzZWZ1bCBmb3IgdGhlCgkgICAgICAgICBkb2MgZ2VuZXJhdGlvbgoJKiBwYXJzZXIuYzogZml4ZWQgYnVncyAjMzkwOCBhbmQgIzM5MzcgYW5kIGEgbWVtb3J5IGxlYWsKCSAgICAgICAgIGluIHRoZSBTQVggQVBJCgkqIGRvYy8qOiByZWJ1aWx0IHRoZSBkb2MgbWFraW5nIHN1cmUgZXZlcnl0aGluZyBhcHBlYXJzIGluIHRoZQoJICAgICAgICAgSFRNTCBmaWxlcwoKV2VkIERlYyAgMSAxMDoyNzo0NyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLltjaF0gSFRNTHRyZWUuYywgZGVidWdYTUwuYywgY29uZmlndXJlLmluLCB4bWwtY29uZmlnLmluOgoJICAgICBhZGRlZCB0aGUgcGF0Y2ggZnJvbSBDYXJsIE55Z2FyZCA8Y255Z2FyZEBiZWxsYXRsYW50aWMubmV0PgoJICAgICB3aGljaCBhbGxvdyBpbXByZXNzaXZlIHNwZWVkIGltcHJvdmVtZW50IG9uIGRhdGFzZXQgd2l0aAoJICAgICBsYXJnZSB0ZXh0IHBpZWNlcywgYnV0IGF0IHRoZSBjb3N0IG9mIGJyb2tlbiBiaW5hcnkKCSAgICAgY29tcGF0aWJpbGl0eSBhbmQgc2xpZ2h0bHkgYmlnZ2VyIG1lbW9yeSB1c2FnZS4KCSAgICAgQ29uZmlndXJlIHdpdGggLS13aXRoLWJ1ZmZlcnMgdG8gYWN0aXZhdGUgdGhlbSwgdGhleQoJICAgICBhcmUgcHJvdGVjdGVkIHdpdGggWE1MX1VTRV9CVUZGRVJfQ09OVEVOVCBkZWZpbmUuCgkqIGVudGl0aWVzLltjaF0sIHBhcnNlci5jOiBhZGRlZCB4bWxDbGVhbnVwUHJlZGVmaW5lZEVudGl0aWVzKCksCgkgICAgIGdvYWwgaXMgMCBtZW1vcnkgbGVmdCBhbGxvY2F0ZWQgb25jZSBwYXJzZXIgaXMgbm8gbW9yZSB1c2VkCgkqIHRlc3REQVYuYywgdGVzdEhUTUwuYywgdGVzdFNBWC5jLCB0ZXN0WFBhdGguYzogbWFrZSBzdXJlIHdlCgkgICAgIGNhbGwgeG1sQ2xlYW51cFBhcnNlcigpIGFuZCB4bWxNZW1vcnlEdW1wKCkKCldlZCBOb3YgMjQgMTk6MDA6MDYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdIHhtbElPLltjaF0gcGFyc2VyLmMgdmFsaWQuYzogY29kZSBjbGVhbnVwIHdpdGggLXBlZGFudGljCgkqIHBhcnNlci5bY2hdIGVuY29kaW5nLltjaF06IGFkZGVkIG1lbW9yeSBjbGVhbnVwIHJvdXRpbmVzCgkqIHBhcnNlci5jOiBjbG9zaW5nIGJ1ZyAjMzc4OAoJKiBkb2MvKjogcmVidWlsdCB0aGUgZG9jCgpUdWUgTm92IDIzIDExOjIzOjU1IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogY2xvc2luZyBidWcgMzc0OCwgYWRkZWQgeG1sTmV3RG9jUmF3Tm9kZSgpLCAKCSAgICAgICAgICAgICB4bWxOZXdUZXh0Q2hpbGQoKSBhbmQgeG1sU2V0Q29tcHJlc3NNb2RlKCkgYmVoYXZpb3VyLgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1jb21wcmVzcyBvcHRpb24KCSogZG9jLyo6IHJlYnVpbHQgdGhlIGRvY3VtZW50YXRpb24KCkZyaSBOb3YgMTkgMTg6NDE6MjggQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBidWdmaXhpbmcsIHRoZSBkYW1uIHRoaW5nIE1VU1Qgbm90IGNyYXNoIGV2ZW4KCSAgICAgICAgICAgICAgICBpZiBnaXZlbiAvcHJvYy9rY29yZSBhcyBpbnB1dCAhCgkqIGRvYy94bWwuaHRtbCBkb2MvKjogdXBkYXRlZCBhbmQgcmVidWlsdCB0aGUgZG9jdW1lbnRhdGlvbgoKVGh1IE5vdiAxOCAxNDo1NzoxOCBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogRml4ZWQgc29tZSB3cm9uZ2x5IHNwYWNlIGNvbGxhcHNpbmcgY29kZSBkdWUgdG8KCSAgICAgICAgICAgIGEgbWlzcmVhZGluZyBvZiB0aGUgc3BlYy4KCSogcmVzdWx0Lyo6IGZpeGVkIHRoZSBvdXRwdXQgYWNjb3JkaW5nbHkJICAgIAoKV2VkIE5vdiAxNyAxODoyODowNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBlbmNvZGluZy5jOiBidWcgZml4IGFuZCB0eXBvcwoJKiB4bWxJTy5bY2hdIHBhcnNlci5jOiBmaXJzdCBiaXRzIHRvd2FyZCByZWFsIHByb2dyZXNzaXZlIHBhcnNpbmcKCSogcGFyc2VyLmM6IGFkZGVkIGF0dHJpYnV0ZSBub3JtYWxpemF0aW9uIGNsb3NpbmcgYnVnICMzNTk3CgkqIHRlc3QvYXR0KiByZXN1bHQvYXR0KiBTQVhyZXN1bHQvYXR0KjogdGVzdGNhc2UgZm9yIGF0dHJpYnV0ZQoJICAgIG5vcm1hbGl6YXRpb24KCk1vbiBOb3YgMTUgMTg6NTA6NTYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiBjbG9zaW5nIGJ1ZyAjMzE2MyBieSBhZGRpbmcgZXh0cmEgZmxhZ3MgZm9yIHRoZQoJICAgICAgICAgICAgICAgIGNjIGNvbXBpbGVyIG9uIEhQLVVYCgpGcmkgTm92IDEyIDE3OjQxOjIwIENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHZhbGlkLltjaF0gOiByZW1vdmVkIGEgdHlwbyBhbmQgYW4gZW51bWVyYXRlZCB0eXBlIGJ1ZyBpbiB0aGUKCSAgICAgICAgICAgICAgIHhtbEFkZEVsZW1lbnREZWNsKCkgZnVuY3Rpb24KCSogdHJlZS5jIDogSSBjaGFuZ2VkIHhtbFNldFByb3AoKSBhbmQgeG1sTmV3UHJvcCgpIHRvIGRvIHRoZQoJICAgIGNhbGwgdG8geG1sRW5jb2RlRW50aXRpZXNSZWVudHJhbnQoKSBzbyB0aGF0IHRoZSBmdW5jdGlvbnMgCgkgICAgTmV3LCBTZXQgYW5kIEdldCBhcmUgYXQgdGhlIHNhbWUgbGV2ZWwuCgkqIHBhcnNlci5jIEhUTUxwYXJzZXIuYzogZXh0cmEgbWVtb3J5IGFsbG9jYXRpb24gYnVnIGZvcgoJICAgIGF0dHJpYnV0ZXMgZGV0ZWN0ZWQgYnkgc29tZW9uZSB1c2luZyBsaWJ4bWwgaW4gZW1iZWRkZWQgc3lzdGVtcyA6LSkKClRodSBPY3QgMjggMTc6NDk6MjYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5oOiB0dXJuZWQgb2ZmIG1lbSBkZWJ1ZyA6LVwKCk1vbiBPY3QgMjUgMTI6MTM6MjUgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBjbG9zZWQgYnVnICMyNzg0IGEgb25lIGxpbmUgZml4LCBidXQgd29ydGggcHVzaGluZwoJICAgICAgICAgICAgYSBuZXcgcmVsZWFzZSBvdXQKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBhdXRvLWNsb3NlIGJ1Z3Mgb24gbGlzdCBpdGVtcywgemVyb2luZwoJICAgICAgICAgICAgc29tZSBzdHJ1Y3R1cmVzLCBjb21tZW50cyBiZWZvcmUgYW5kIGFmdGVyIHRoZQoJCSAgICBtYWluIGVsZW1lbnQsIGFuZCBvdGhlciBuYXN0eW5lc3MKCSogSFRNTHRyZWUuYyB0cmVlLmM6IGFjY29tb2RhdGUgdGhlIGV4dGVuZGVkIEhUTUwgc3VwcG9ydGVkCSAgICAKCSogY29uZmlndXJlLmluOiBwdXNoaW5nIDEuNy40CgkqIHRlc3QvZW50OCBhbmQgcmVsYXRlZCBvdXRwdXRzIDogYWRkZWQgYSBuZXcgdGVzdCBmb3IgYnVnICMyNzg0CgkqIHRlc3QvSFRNTC93aXJlZC5odG1sIGFuZCByZWxhdGVkIG91dHB1dDogYSBuYXN0eSBIVE1MIGV4YW1wbGUKCSogTWFrZWZpbGUuYW06IGltcHJvdmVkIHRoZSB0ZXN0IHNjcmlwdHMKCSogZG9jcy8qIDogcmVyYW4gdGhlIGRvY3VtZW50YXRpb24gZXh0cmFjdG9yLCB1cGRhdGVkIHhtbC5odG1sCgpUaHUgT2N0IDE0IDEwOjI5OjU2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMsIEhUTUx0cmVlLmMsIHRyZWUuaDogY29tcGxldGVseSByZXZhbXBlZCB0aGUKCSAgICAgSFRNTHBhcnNlciBhbmQgZGVidWdnZWQgdGhlIEhUTUwgcmVsYXRlZCBjb2RlLiBIVE1MIGRvY3VtZW50cwoJICAgICBub3cgaGF2ZSB0aGVpciBvd24gdHlwZQoJKiBlbnRpdGllcy5jOiBkbyBub3QgZHVtcCAmYXBvczsgZm9yIEhUTUwgb3V0cHV0CgkqIHhtbG1lbW9yeS5jOiBpbXByb3ZlbWVudCwgYnJlYWtwb2ludCBtZWNoYW5pc20KCSogdGVzdEhUTUwuYzogYWRkZWQgLS1zYXggLS1yZXBlYXQgLi4uCgkqIE1ha2VmaWxlLmFtOiBpbXByb3ZlZCB0aGUgSFRNTCB0ZXN0cwoJKiB2YWxpZC5bY2hdOiBhZGRlZCB4bWxWYWxpZEdldFZhbGlkRWxlbWVudHMgYW5kCgkgICAgICAgICAgICAgIHhtbFZhbGlkR2V0UG90ZW50aWFsQ2hpbGRyZW4KCSogdGVzdGVyLmM6IGFkZGVkIC0taW5zZXJ0IHRvIHRlc3QgdGhlIDIgbmV3IGZ1bmN0aW9ucwoJKiB0ZXN0Ly8qIHJlc3VsdC8vKiBTQVhyZXN1bHQvLyogOiByZWdyZXNzaW9uIHRlc3QgY2xlYW51cAoJICAgICAgICAgICAgICAgYW5kIGV4dGVuc2lvbi4KCSogZG9jL2h0bWwgOiBhZGRlZCBkb2MgZm9yIG5ldyBtb2R1bGVzIGdub21lLXhtbC14bWxtZW1vcnkuaHRtbCBhbmQKCSAgICAgICAgICAgICBnbm9tZS14bWwtbmFub2h0dHAuaHRtbAoKTW9uIE9jdCAxMSAxNDozMTo1OCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jOiBmaXhlZCBwcm9ibGVtcyB3aXRoIHNvbWUgYXV0b2Nsb3NlIHRhZ3MKCSogdHJlZS5jOiBmaXhlZCBYTUwgb3V0cHV0IHByb2JsZW1zLiAKCSogcmVzdWx0LyogU0FYcmVzdWx0Lyo6IHVwZGF0ZSBvZiB0aGUgdGVzdHMgb3V0cHV0CgpTYXQgT2N0ICA5IDExOjAyOjU3IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbTogQXJ0dXJvIHBhdGNoIGZvciB4bWxDb25mLnNoIHZlcnNpb24gaW5mbwoJKiBwYXJzZXIuYzogVGltIEpvc2xpbmcgcGF0Y2ggZm9yIHNpbmdsZSBxdW90ZWQgaXRlbXMKCSogdGVzdGVyLmM6IFRpbSBKb3NsaW5nIHBhdGNoIGZvciB0ZXN0ZXIgb3B0aW9ucyB1c2FnZQoJKiB0cmVlLmg6IGluZGVudCBjbGVhbnVwCgpGcmkgT2N0ICA4IDE2OjM1OjM3IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmggOiBGaXhlZCBwcm9ibGVtcyB3aXRoIEhUTUwgcGFyc2luZwoJICAgIHJlcG9ydGVkIGJ5IEtyaXN0aWFuIEhvZ3NiZXJnIEtyaXN0ZW5zZW4gPGhvZ3NiZXJnQGRhaW1pLmF1LmRrPgoKRnJpIE9jdCAgOCAxMTozNzoxMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jIDogUmFwaCBwYXRjaCBmb3IgaW5pdGlhbGl6YXRpb24gb2YgQ09SQkEgZmllbGRzCgkqIHBhcnNlci5jLCB4cGF0aC5jLCAuLi46IG1vZGlmaWNhdGlvbiBvZiBkb2MgY29tbWVudHMKCSogeHBhdGguYyA6IGFsbG93IHNwYWNlcyBpbiB4cGF0aCBleHByZXNzaW9ucwoKTW9uIFNlcCAyNyAxMDoxNjo0MyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogeG1sbWVtb3J5Lmg6IHR1cm5pbmcgb2ZmIG1lbW9yeSBkZWJ1ZyA6LSgKClN1biBTZXAgMjYgMTM6MTY6NTQgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdIDogYWRkZWQgeG1sU0FYVXNlclBhcnNlRmlsZSgpIGFuZCB4bWxTQVhVc2VyUGFyc2VNZW1vcnkoKQoJICAgICAgICAgICAgICAgIGJldHRlciBTQVggaW50ZXJmYWNlcy4KCSogdGVzdFNBWC5jOiB1c2VzIHRoZSBuZXcgU0FYIHJvdXRpbmUsIGF2b2lkIGZldGNoaW5nIGFueSByZW1vdGUKCSAgICAgICAgICAgICBlbnRpdHkuCgkqIGNvbmZpZ3VyZS5pbjogMS43LjIKCkZyaSBTZXAgMjQgMTY6MDE6MDEgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCB0aGUgVVJMCgkqIGRvYy94bWwuaHRtbDogaW1wcm92ZWQgdGhlIGRvY3VtZW50YXRpb24gZnJvbnQtZW5kCgpGcmkgU2VwIDI0IDAxOjA2OjM2IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBuYW5vaHR0cC5jOiBjb25kaXRpb25uZWQgcmVmZXJlbmNlcyB0byBzbnByaW50ZiB3aXRoIEhBVkVfU05QUklOVEYKCkZyaSBTZXAgMjQgMDA6MTU6NTggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGxpYnhtbC5zcGVjLmluOiBmaXhlZCB0aGUgYWxwaGEgY29tcGlsZSBwcm9ibGVtCgkqIHBhcnNlci5bY2hdOiBjaGFuZ2VkIGVycm5vIHRvIGVyck5vIGluIHRoZSBwYXJzZXIgY29udGV4dCA6LSgKCSogKi5bY2hdOiBjaGFuZ2VkIENIQVIgdG8geG1sQ2hhciB0byBhdm9pZCBwcm9ibGVtIG9uIFdJTjMyCgkqIGRvYy94bWwuaHRtbDogY2hhbmdlZCBDSEFSIHRvIHhtbENoYXIKCSogZG9jL2h0bWwvKjogcmVjb21waWxlZCB0aGUgZG9jdW1lbnRhdGlvbgoJKiBjb25maWd1cmUuaW46IDEuNy4xCgpXZWQgU2VwIDIyIDExOjQwOjMxIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuaDogbW9kaWZpZWQgdGhlIHBhcnNlciBjb250ZXh0IHN0cnVjdCB0byByZWdhaW4gMS40LjAKCSAgICAgICAgICAgIGJpbmFyeSBjb21wYXRpYmlsaXR5CgkqIHBhcnNlci5jLCB4bWwtZXJyb3IuaDogYWRkZWQgZXJybm8gb3QgdGVoIGNvbnRleHQgYW5kIGRlZmluZWQKCSAgICAgICAgICAgIGEgc2V0IG9mIGVycm9ycyB2YWx1ZXMgd2l0aCB1cGRhdGUgb2YgZXJybm8KCSogbmFub2h0dHAuW2NoXTogbWluaW1hbGlzdCBIVFRQIGZyb250LWVuZCBmb3IgZmV0Y2hpbmcgcmVtb3RlCgkgICAgICAgICAgICBEVERzIGFuZCBlbnRpdGllcwoJKiAqLmgsICouYzogY29tcGxldGUgY2xlYW51cCBvZiB0aGUgdXNlIG9mIGNvbmZpZy5oIGFuZCBpbmNsdWRlCgkgICAgICAgICAgICBwcm90ZWN0aW9uIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzZXR1cC4KCSogb3ZlcmFsbGwgZGVidWdnaW5nLCBtYWludGVuYW5jZSBhbmQgYnVnLWZpeGluZyBvbiBhbGwgbW9kdWxlcwoJKiB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgkqIHJlYWR5IGZvciAxLjcuMAoKV2VkIFNlcCAgOCAyMjo0NjoxNCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogSFRNTHBhcnNlci5jIDogY2xlYW51cAoJKiBTQVguYyB2YWxpZC5jIHZhbGlkLmg6IGFkZGVkIElEL0lEUkVGIGNoZWNraW5nCgkqIHRyZWUuYyB0cmVlLmg6IGV4dGVuZGVkIGRvYyBzdHJ1Y3R1cmUgZm9yIHJlZnMKCSogY29uZmlndXJlLmluOiAxLjYuMgoJKiBwYXJzZXIuYzogcGF0Y2hlZCBidWcgaW4gU0FYIHVzZXIgYXJnIGNhbGwKCSogcGFyc2VySW50ZXJuYWxzLmg6IHBhdGNoZWQgbWlzc2luZyBjbG9zZSBpbiBDKysgd3JhcHBpbmcKCSogdGVzdFhQYXRoLmMgeHBhdGguYyB4cGF0aC5oOiBwcmVwYXJlZCBmb3IgZXh0ZW5zaWJpbGl0eSwKCSAgZXNwZWNpYWxseSB1cGNvbWluZyBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbi4KCSogZG9jL3htbC5odG1sOiBhdWdtZW50ZWQsIHR5cG8KClNhdCBTZXAgIDQgMjI6NDg6MDUgQ0VTVCAxOTk5IFRpbXVyIEJha2V5ZXYgPG1jQGJhdC5ydT4KCgkqIGRvYy9NYWtlZmlsZS5hbTogcmVwbGFjZWQgImluc3RhbGwgLWQgIiB3aXRoICJta2luc3RhbGxkaXJzIiAtCglub3QgYWxsIGludm9jYXRpb25zIG9mIGluc3RhbGwgdW5kZXJzdGFuZCAtZC4KClNhdCBTZXAgIDQgMjI6MjA6MDcgQ0VTVCAxOTk5IFRpbXVyIEJha2V5ZXYgPG1jQGJhdC5ydT4KCgkqIE1ha2VmaWxlLmFtOiBwcmVwZW5kIGFsbCB0aGUgdGVzdCogY2FsbHMgd2l0aCAkKHRvcF9idWlsZGRpcikgLQoJdG8gbWFrZSAnY2hlY2snIHdvcmtzLCB3aGVuIGJ1aWxkZGlyICE9IHNyY2Rpci4KClNhdCBTZXAgIDQgMjA6MjU6NDYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGRvYy94bWwuaHRtbCA6IHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KCkZyaSBTZXAgIDMgMDA6MDE6MDggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHhtbG1lbW9yeS5bY2hdIE1ha2VmaWxlLmFtICA6YWRkZWQgYSBtZW1vcnkgd3JhcHBlciB0byBjaGFzZQoJICAgICAgbm90IGRlYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MKCSogKi5jIDogcmVwbGFjZXMgYWxsIGNhbGxzIHRvIG1hbGxvYygpIGZyZWUoKSBhbmQgcmVhbGxvYygpIHRvCgkgICAgICB0aGUgd3JhcHBlciBmdW5jdGlvbnMvbWFjcm9zCgkqIHRyZWUuYyA6IHJlbW92ZWQgbWVtb3J5IGxlYWtzIGR1ZXMgdG8gY2FsbGluZyB4bWxGcmVlTm9kZSgpCgkgICAgICBpbnN0ZWFkIG9mIHhtbEZyZWVOb2RlTGlzdCgpCgpXZWQgU2VwICAxIDE0OjE1OjA5IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmM6IGNvcnJlY3RlZCBhIHN0dXBpZCBidWcgbGVhZGluZyB0byBjb3JlIGR1bXAgYXQKCSAgICAgICAgICAgICAgICB0cmVlIGRlYWxsb2NhdGlvbi4gUmVtb3ZlZCB3YXJuaW5ncyBpbmRpY2F0ZWQgYnkKCQkJU3RlcGhhbmUuQ29udmVyc3lAbHJpLmZyCgkqIGVudGl0aWVzLmM6IEZpeGVzIFlldCBBbm90aGVyIFN0dXBpZCBCdWcsIGVudGl0aWVzIHdlcmUgbm90CgkgICAgICAgICAgICAgIGxvb2tlZCBmb3IgaW4gdGhlIGV4dGVybmFsIHN1YnNldAoKTW9uIEF1ZyAzMCAxMzoyMjoyNiBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMgdmFsaWQuW2NoXSB4cGF0aC5jOiBwYXRjaGVkIGNvbXBpbGF0aW9uIHdhcm5pbmdzIHJlcG9ydGVkCgkgIG9uIFNHSSBieSBTdGVwaGFuZS5Db252ZXJzeUBscmkuZnIKClN1biBBdWcgMjkgMjI6Mjc6MjkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGFsbCAuaCA6IGNoYW5nZWQgdGhlIHByb3RvdHlwZSBkZWNsYXJhdGlvbiBpbmRlbnQgYXMgaW4gZ3RrCgkqIG1vc3QgLmMgOiB3b3JraW5nIG9uIHJlZHVjaW5nIHRoZSBUT0RPcyBpbiB0aGUgY29kZQoJKiBtb3N0IC5jIDogY2xlYW51cCB0aG91Z2ggLXBlZGFudGljIGFuZCBJbnN1cmUrKwoJKiBpbXByb3ZlbWVudHMgb24gdmFsaWRhdGlvbiBJRCBjaGVja2luZ3MuCgkqIHRyZWUuW2NoXSBTQVguYzogYWRkZWQgc3VwcG9ydCBmb3IgbmFtZXNwYWNlIG9uIGF0dHJpYnV0ZXMgIzIwMjIKCSogeG1sLWNvbmZpZy5pbjogY2xvc2VkICMxODEwCgpNb24gQXVnIDE2IDAzOjI3OjM4IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmgsIHZhbGlkLmMsIHZhbGlkLmg6IG1vcmUgd29yayBvbiB2YWxpZGl0eSwgSURzCgkqIHhwYXRoLmM6IGFkZGVkL2ZpeGVkIGNvbXBhcmlkb24gYW5kIGVxdWxpdHksIGFkZGVkIGEgbmV3IGlzaW5mCgkgIGRlZmluaXRpb24gZm9yIEFJWAoKU3VuIEF1ZyAxNSAyMToxNToxNyBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTWFrZWZpbGUuYW0gbGlieG1sLnNwZWMuaW46IGNvcnJlY3RlZCBtaXNzaW5nIHhtbENvbmYuc2ggaW4KCSAgdGhlIGRpc3RyaWJ1dGlvbiBkdWUgdG8gYSBjdXQnbiBwYXN0ZSBlcnJvciBhdCBsYXN0IGNvbW1pdAoKVHVlIEF1ZyAxMCAyMDoyODowOSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogY29uZmlndXJlLmluOiB1cGdyYWRlZCB0byB2ZXJzaW9uIDEuNC4wCgkqIHZhbGlkLltjaF0sIFNBWC5jLCBwYXJzZXIuW2NoXSBwYXJzZXJJbnRlcm5hbHMuaCAuLi4KCSAgQmlnIHVwZGF0ZSwgYWRkZWQgYSBsYXJnZSBwYXJ0IG9mIHRoZSB2YWxpZGF0aW9uIHByb2Nlc3MsCgkgIGl0IHNob3VsZCBiZSB1c2FibGUsIGJ1dCBzb21lIHBhcnRzIGFyZSBtaXNzaW5nCgkqIHhwYXRoLmM6IGltcHJvdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiB3LnIudC4gcm9vdC4KCSogTWFrZWZpbGUuYW06IGFkZGVkIG1vcmUgdGVzdHMKCSogdGVzdCBhbmQgcmVzdWx0IHRyZWVzOiBhZGRlZCBhIGxvdCBvZiB0ZXN0cwoJKiBsaWJ4bWwuc3BlYy5pbjogZXhwb3J0IGxpYnhtbC5zby4wIGFuZCBsaWJ4bWwuc28uMQoKVHVlIEF1ZyAxMCAxMTozMzo0MSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogQWRkZWQgYW4gSEFDS0lORyBmaWxlCgpUdWUgSnVsIDI3IDIxOjQzOjAwIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4cGF0aC5bY2hdIDogaW1wcm92ZW1lbnRzIGFuZCBkZWJ1ZyBvZiB0aGUgWFBhdGggaW1wbGVtZW50YXRpb24KCSogcGFyc2VyLmMsIEhUTUxwYXJzZXIuYyA6IG1vZGlmaWVkIHRoZSBwYXJzZXJzIHRvIGJlIHByb2dyZXNzaXZlCgkqIHRyZWUuW2NoXSA6IGV4dGVuZGVkIHRoZSBCdWZmZXIgcHJvbWl0aXZlcwoJKiB4bWxJTy5bY2hdIDogYWRkZWQgYmFzaWMgSS9PIHJvdXRpbmVzIHByb3ZpZGluZyBwcm9ncmVzc2l2ZQoJICBwYXJzaW5nIGFuZCByZWFkeSBmb3IgSTE4TiBjb252ZXJzaW9uIHBsdWdpbnMKCSogU0FYcmVzdWx0LyogOiB0aGUgU0FYIGNhbGxiYWNrIHNlcXVlbmNlIG1heWJlIHNsaWdodGx5IGRpZmZlcmVudAoJICBub3cKCSogdGVzdCouYyA6IGltcHJvdmVkL3VwZGF0ZWQgdGhlIHRlc3RzIHByb2dyYW1zCgkqIGRvYy8qIDogcmVjb21waWxlZCB0aGUgZG9jcy4KCjE5OTktMDctMjYgIE1pY2hhZWwgTWVla3MgIDxtaWNoYWVsQGVkZW5wcm9qZWN0Lm9yZz4KCgkqIHRyZWUuaDogQWRkIGNvbnN0IHRvICdjb250ZW50JyBpbiB4bWxOZXdEb2NOb2RlLCB4bWxOZXdDaGlsZAoKCSogdHJlZS5jOiBEaXR0by4KClRodSBKdWwgMTUgMTY6MTc6MTYgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogdXBncmFkZWQgdG8gdmVyc2lvbiAxLjQuMAoJKiB4cGF0aC5jLCB4cGF0aC5oLCB0ZXN0WFBhdGguYywgbWFrZWZpbGUuYW06IGFkZGVkIGNvZGUgZm9yIHRoZSBYUGF0aAoJICBkcmFmdCBmcm9tIFczQy4gV2lsbCBiZSB1c2VkIGJ5IFhQb2ludGVyLCBYbGluaywgWFNMLCBhbmQgcG9zc2libHkKCSAgWE1MIHF1ZXJ5IGxhbmd1YWdlLCBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGggZm9yIG1vcmUgZGV0YWlscy4KCSogcGFyc2VyLmMsIHBhcnNlci5oOiBhZGRlZCBDSEFSKiByZWxhdGVkIHN0cmluZyBmdW5jdGlvbnMgZm9yIFhQYXRoCgkqIEhUTUxwYXJzZXIuW2NoXSwgSFRNTHRyZWUuYzogYSBiaXQgb2YgY2xlYW51cCBvbiBlbnRpdGllcy4KCSogZG9jL2dub21lLXhtbC5zZ21sLCBkb2MvaHRtbC8qIDogYWRkZWQgWFBhdGggYW5kIEhUTUwgZG9jdW1lbnRhdGlvbiwKCSAgcmVidWlsZCB0aGUgZG9jcy4KCSogTWFrZWZpbGUuYW0sIHRlc3QvWFBhdGgvKiwgcmVzdWx0L1hQYXRoLyo6IGFkZGVkIGFuIFhQYXRodGVzdHMgdGFyZ2V0CgkgIGFuZCByZWdyZXNzaW9uIHRlc3RpbmcgY2FwYWJpbGl0aWVzIGZvciBYUGF0aC4KCk1vbiBKdWwgMTIgMTI6MzY6MzkgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBIVE1McGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb2huIEVsbHNvbiA8ZWxsc29uQGx1Y2VudC5jb20+CgkgIGNsb3NpbmcgYnVnICMxNjQ2CgpNb24gSnVsIDEyIDExOjA0OjQ0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSwgZXhhbXBsZS9NYWtlZmlsZS5hbTogY2xvc2VkIGJ1ZyAjMTY4MwoKU3VuIEp1bCAxMSAxODoxNjozNCBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZXhhbXBsZS9NYWtlZmlsZS5hbSwgY29uZmlndXJlLmluOiBhZGRlZCB0aGUgbWFrZWZpbGUgZm9yIHRoZQoJICBnam9icmVhZCBleGFtcGxlCgpTYXQgSnVsIDEwIDE0OjE5OjExIENFU1QgMTk5OSBUb21hc3ogS7NvY3prbyAgPGtsb2N6ZWtAcGxkLm9yZy5wbD4KCgkqIGRvYy9NYWtlZmlsZS5hbToKCS0gZml4IHdoaWNoIGFsbG93ICJtYWtlIGluc3RhbGwgREVTVERJUj08L2luc3RhbGwvcHJlZml4PiIuCgpGcmkgSnVsICA5IDEyOjEwOjI0IENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLmMgcGFyc2VyLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBKb2huIEVsbHNvbiA8ZWxsc29uQGx1Y2VudC5jb20+CgkgIHdoaWNoIGZpeGVkIGEgcHJvYmxlbSBvbiB0aGUgZmlsZSByZWFkaW5nLWNvZGUuCgpXZWQgSnVsICA3IDA5OjI4OjQzIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBIVE1McGFyc2VyLltjaF0sIEhUTUx0cmVlLltjaF06IG1vcmUgd29yayBmb3IgSFRNTCBwYXJzaW5nIGFuZAoJICBvdXRwdXQuCgkqIE1ha2VmaWxlLmFtLCB0ZXN0L0hUTUwvKiwgcmVzdWx0L0hUTUwvKjogYWRkZWQgSFRNTHRlc3RzIHRhcmdldGVzdEhUTUx0CgpXZWQgSnVsICA3IDAwOjI1OjQyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuaCA6IE9vcHMgcmVtb3ZlZCB0aGUgYmluYXJ5IGNvbXBhdGliaWxpdHkgcHJvYmxlbQoJKiBIVE1McGFyc2VyLltjaF0sIEhUTUx0cmVlLmggOiBNb3JlIHdvcmsgb24gdGhlIEhUTUwgcGFyc2UvZHVtcAoJKiBwYXJzZXIuYywgSFRNTHBhcnNlci5jOiBhcHBsaWVkIHBhdGNoZXMgZm9yIHJlYWRpbmcgZnJvbSBzdGRpbgoKTW9uIEp1bCAgNSAxODo0NTozMSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmMsIHZhbGlkLmM6IGNsZWFudXAgYnVnICMxNTkxCgkqIGNvbmZpZ3VyZS5pbjogY2xlYW51cCBidWcgIzE1OTIKCSogSFRNTHBhcnNlci5bY2hdLCB0ZXN0SFRNTC5jOiBzdGFydGVkIGFkZGluZyBhbiBIVE1MIHBhcnNlciB1c2luZwoJICB0aGUgc2FtZSB0cmVlIGJhY2stZW5kLiBIZW5jZSBnZG9tZSB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgaXQuCgkqIGRvYy9NYWtlZmlsZS5hbTogY2xvc2UgYnVnICM2MTcKClNhdCBKdW4gMjYgMjM6MzY6MzggRURUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IGFsbG9jdGF0ZSBhIHBlciBwYXJzZXIgY29udGV4dCBTQVggaW50ZXJmYWNlIGJsb2NrCgpUdWUgSnVuIDIyIDIzOjQ2OjMyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiByZWxlYXNlZCAxLjMuMCB3aXRoIHhtbEVuY29kZUVudGl0aWVzIHJlc3RvcmluZyBvbGQgYmVoYXZpb3VyCgkgIGFuZCB4bWxFbmNvZGVFbnRpdGllc1JlZW50cmFudCB3aXRoIHRoZSBjb3JyZWN0IG9uZSA6LVwKCk1vbiBKdW4gMjEgMTQ6MDc6NTMgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbW1pdCBvZiBteSBpbnRlcm5hbCBYTUwgYmFzZSBjaGFuZ2VzLCBxdWl0ZSBhIGxvdCBvZgoJICBjaGFuZ2VzLCBjbGVhbnVwcywgYmV0dGVyIGVudGl0aWVzIHN1cHBvcnQsIGZyYW1ld29yayBmb3IKCSAgbmV3IEkvTyBhbmQgY2hhcnNldCBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nCgkqIEZpeGVkIHRoZSBjb25maWd1cmUvTWFrZWZpbGUgc3R1ZmYgdG8gZ2VuZXJhdGUgc2hhcmVkIGxpYnMKCSAgd2l0aCB0aGUgcHJvcGVyIHZlcnNpb24gaW5mbywgc28gd2UganVtcGVkIG9uIHJldiBmcm9tCgkgIDAuMC4wIHRvIDEuMi4wICEgVGhlIGJpbmFyeSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBicm9rZW4sCgkgIHhtbEVuY29kZUVudGl0aWVzKCkgcmVzdWx0IG5lZWQgdG8gYmUgZnJlZWQgbm93LCBhbmQgYSBzdHJpbmcKCSAgeG1sUGFyc2VyVmVyc2lvbiBwcm92aWRlIHRoZSBjdXJyZW50IGxpYnJhcnkgdmVyc2lvbi4KClR1ZSBKdW4gMTUgMTQ6MjQ6MTkgMTk5OSAgUmFwaCBMZXZpZW4gIDxyYXBoQGFjbS5vcmc+CgoJKiBwYXJzZXIuYzogZml4ZWQgYSBidWZmZXIgb3ZlcnJ1biBmb3Igd2hlbiB5b3UgaGF2ZSBhIHZlcnkgbG9uZwoJYXR0cmlidXRlIHdpdGggbm8gZW50aXRpZXMgaW4gaXQuCgpNb24gSnVuIDE0IDAwOjE3OjUwIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCBleGFtcGxlIGRpcmVjdG9yeQoJKiBhZGRlZCBleGFtcGxlL2dqb2JzLnhtbCBnam9icmVhZC5jLCBzdGlsbCBuZWVkIGEgTWFrZWZpbGUuaW4KCldlZCBKdW4gIDIgMTk6NDA6NTggQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIFJlbGVhc2Ugb2YgbGlieG1sLTEuMSwgbmVhcmx5IGV2ZXJ5dGhpbmcgaGFzIGJlZW4gdG91Y2hlZCBmb3IKCSAgdGhpcy4KCSogQWRkZWQgbW9yZSByZWdyZXNzaW9uIHRlc3RzCgkqIFVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24KClNhdCBNYXkgMjkgMTM6MzQ6NDIgQ0VTVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuW2NoXTogdW5pZmllZCB0aGUgWE1MX05PX0NPUkJBIGRlZmluZXMuCgkqIHBhcnNlci5jIGVuY29kaW5nLltjaF06IHN0YXJ0ZWQgcGx1Z2dpbmcgaW4gY2hhciBlbmNvZGluZyBkZXRlY3Rpb24KCkZyaSBNYXkgMjggMjI6NTg6NDIgRURUIDE5OTkgTWFuaXNoIFZhY2hoYXJhamFuaSA8bXZhY2hoYXJAdmdlci5ydXRnZXJzLmVkdT4KCgkqIHRyZWUuYzogKHhtbFNhdmVGaWxlKSAtIHJlbW92ZWQgZG91YmxlIGNhbGwgb2YgeG1sQ29udGVudER1bXAuICAKCSAgQWxzbyBmcmVlZCBhbGxvY2F0ZWQgYnVmZmVyLgoKV2VkIEFwciAyMSAyMjowNzozNSBDRVNUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gZW50aXRpZXMuW2NoXSB2YWxpZC5bY2hdIDogcmVtb3ZlZCB0aGUgbWFpbgoJICByZWVudHJhbmN5IHByb2JsZW0gYXQgcHJpbnRpbmcuIE9uZSBpcyBsZWZ0IGluIGVudGl0aWVzLmMsIHRvCgkgIHJlbW92ZSBBU0FQCgkqIHRlc3RTQVguYyA6IGFkZGVkIGEgdGVzdCBleGFtcGxlIHNob3dpbmcgdGhlIHVzZSBvZiB0aGUgU0FYIAoJICBpbnRlcmZhY2UgaWYgb25lIGRvZXNuJ3Qgd2FudCB0byBidWlsZCB0aGUgRE9NIHRyZWUuCgkqIGh0bWwvZ25vbWUteG1sLSouaHRtbCBodG1sL2luZGV4LnNnbWw6IHJlZ2VuZXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uCgpNb24gQXByICA1IDE0OjE0OjQwIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSB0cmVlLltjaF0gU0FYLmMsIHBhcnNlckludGVybmFscy5oIHZhbGlkLltjaF06CgkgIGxhcmdlIHJldmFtcGluZyBvZiB0aGUgcGFyc2VyIHRvIHVzZSBTQVggY2FsbGJhY2tzCgkgIGh0dHA6Ly93d3cubWVnZ2luc29uLmNvbS9TQVgvIChvciBhdCBsZWFzdCBhIEMgbGlrZSBpbnRlcmZhY2UKCSAgYSBsYSBFeHBhdCkuIEl0J3Mgbm93IHBvc3NpYmxlIHRvIHNldCB1cCB5b3VyIG93biBjYWxsYmFja3MKCSAgYW5kIHRoZSBwYXJzZXIgd2lsbCBub3QgYnVpbGQgYSBET00gdHJlZS4KCSogdGVzdC8qIHJlc3VsdC8qOiB1cGRhdGVkIHRoZSB0ZXN0IHN1aXRlLCBJIGZpbmFsbHkgcmVtb3ZlZAoJICB0aGUgb2xkIE5hbWVzcGFjZSBkcmFmdCBzdXBwb3J0IChQSSBiYXNlZCkuCgpGcmkgQXByICAyIDE3OjU3OjMyIENFU1QgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbTogYWRkZWQgdGVzdCByZXN1bHQgdG8gRVhUUkFfRElTVCBmb3IgbWFrZSB0ZXN0cwoKV2VkIE1hciAyNCAyMTozNzowMiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VySW50ZXJuYWxzLmg6IG1vdmVkIHRoZSBjaGFycyBtYWNybyBkZWZpbml0aW9ucwoJICB0byBwYXJzZXJJbnRlcm5hbHMuaAoJKiBwYXJzZXIuYywgZXJyb3IuYzogYXBwbGllZCBwYXRjaGVzIGZyb20gIktudXQgxWtlc3NvbiIKCSAgPGthQHMyLmNoYWxtZXJzLnNlPiBmb3IgY2xlYW4gY29tcGlsYXRpb24gdW5kZXIgTVNWQyA2IDotbwoKVHVlIE1hciAyMyAxMToxMDoxNSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWwtY29uZmlnLmluIDogYXBwbGllZCBwYXRjaCB0byBtYWtlIC0tdmVyc2lvbiB3b3JrCgoxOTk5LTAzLTA1ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogTWFrZWZpbGUuYW0gKGNoZWNrLWxvY2FsKTogQWxpYXMgZm9yIGB0ZXN0cycgdGFyZ2V0LiAgVGhpcyB3aWxsCgljYXVzZSBgbWFrZSBjaGVjaycgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nLgoJKHRlc3RzKTogRG9uJ3QgcnVuIHRlc3RzIGluIHNyY2Rpci4gIEFsc28sIHJlcGxhY2VkIGNhbGxzIHRvCgliYXNlbmFtZSB3aXRoIGEgYHNlZCcgImVxdWl2YWxlbnQiLgoKRnJpIE1hciAgNSAwNzoyMzo1MyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBSZW5hbWVkIGVycm9yLmggdG8geG1sLWVycm9yLmgsIGNvcnJlY3RlZCBNYWtlZmlsZS5hbSB0byBsaXN0CgkgIGl0IGluIHRoZSBoZWFkZXIgYW5kIG5vdCB0aGUgc291cmNlcywgdXBkYXRlZCB0aGUgZG9jLgoJICBUaGFua3MgdG8gVGltIE1vb25leSA8bW9vbmV5QGRvZ2JlcnQuY2MubmRzdS5ub2Rhay5lZHU+IGZvcgoJICBwb2ludGluZyB0aGlzIG91dC4KCk1vbiBNYXIgIDEgMTM6Mjc6MTcgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIHBhcnNlci5oLCBwYXJzZXJJbnRlcm5hbHMuaDogbWVtb3J5IGxlYWsgaHVudGluZywKCSAgZXhwb3J0ZWQgdGhlIGlucHV0U3RyZWFtIHJvdXRpbmVzLgoJKiBkb2MvaHRtbC8qIDogdXBkYXRlZCBhY2NvcmRpbmdseQoKU3VuIEZlYiAyOCAyMjo1MTozMyBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYywgcGFyc2VyLmgsIHBhcnNlckludGVybmFscy5oOiBhZGRlZCBhIGZldyBleHRyYQoJICBpbnRlcm5hbCBjYWxscyB0byBhbGxvY2F0ZSBhbmQgZnJlZSBwYXJzZXIgY29udGV4dHMgLi4uCgkqIGRvYy9odG1sLyogOiB1cGRhdGVkIGFjY29yZGluZ2x5CgpUaHUgRmViIDI1IDExOjUyOjI0IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuYW0sIGRvYy9tYWtlZmlsZS5hbSA6IEdlbmVyYWwgY2hhbmdlcyBmb3IKCSAgMS4wLjAgcmVsZWFzZSBhbmQgaW5jbHVkaW5nIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgoKVGh1IEZlYiAyNSAwOTo0NDo1MiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBtYWtlZmlsZS5hbSA6IGFkZGVkIHBhcnNlckludGVybmFscy5oLCBvb3BzLgoKTW9uIEZlYiAyMiAxMToyNDo1NiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXJJbnRlcm5hbHMuaDogYWRkZWQgdGhpcyBoZWFkZXIgZ2l2aW5nIGFjY2VzcyB0byB0aGUgcGFyc2VyCgkgIGludGVybmFsIGZ1bmN0aW9ucy4KCSogZG9jL01ha2VmaWxlLmFtIDogYWRkZWQgYSByZWJ1aWxkIHRhcmdldCB3aGljaCByZWJ1aWxkcyB0aGUgZnVsbAoJICBzZXQgb2YgZG9jdW1lbnRhdGlvbnMKCSogcGFyc2VyLltjaF0gdHJlZS5bY2hdIHZhbGlkLltjaF06IHNlcmlvdXMgdXBkYXRlcyB3LnIudC4gcGFyc2luZwoJICB0aGUgaW50ZXJuYWwgc3Vic2V0LiAKCSogKi5jICouaDogbW9kaWZpY2F0aW9ucyBuZWVkZWQgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24gdXNpbmcKCSAgZ3RrLWRvYywgY2xlYW51cCBvZiBmdW5jdGlvbnMgYmxvY2tzLCByZW9yZ2FuaXNhdGlvbiBvZiBzdHJ1Y3QKCSAgZGVjbGFyYXRpb25zLgoKVHVlIEZlYiAxNiAxNzoyNzoyOSBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBNYWtlZmlsZS5hbSwgc3BlYywgZG9jL01ha2VmaWxlLmFtIDogdXBncmFkaW5nIHRvIDAuOTkuOCwgZml4aW5nCgkgIHRoZSB0YXIgYW5kIHNwZWMgZmlsZSB0byBpbmNsdWRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvYy4KCjE5OTktMDItMTMgIE51bm8gRmVycmVpcmEgIDxubXJmQHJubC5pc3QudXRsLnB0PgoKCSogZG9jLy5jdnNpZ25vcmU6IEFkZGVkIHRoaXMgZmlsZS4KCk1vbiBGZWIgIDggMTk6Mjc6NTYgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBmaXhlZCB4bWxHZXRQcm9wIHRvIHJldHVybiAiIiB3aGVuIHRoZSBhdHRyaWJ1dGUKCSAgZXhpc3RzLCBldmVuIGlmIHRoZSBub2RlLWxpc3QgaXMgTlVMTC4KCk1vbiBGZWIgIDggMTY6MTA6MTUgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBwYXRjaGVkIGFuIGVycm9yIG91dHB1dHRpbmcgZW1wdHkgYXR0cmlidXRlIHZhbHVlcy4KCSogTWFrZWZpbGUuYW0gYW5kIGRvYy9tYWtlZmlsZS5hbTogaGF2ZSBiZWVuIHVwZGF0ZWQgZHVyaW5nIHRoZQoJICB3ZWVrLWVuZC4gU29ycnkgZm9yIGFuIGVtcHR5IENWUyBsb2csIEkgZ290IGEgc2hlbGwgcHJvYmxlbS4KCk1vbiBGZWIgIDEgMTI6MTA6MTMgQ0VUIDE5OTkgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oOiBjbGVhbmVkIHVwIHVzaW5nIGVudW1zIGluc3RlYWQgb2YgZGVmaW5lcwoJKiBwYXJzZXIuYywgdmFsaWQuW2NoXTogbW9yZSB3b3JrIG9uIHBhcnNpbmcvb3V0cHV0IG9mIGVsZW1lbnQKCSAgZGVjbGFyYXRpb25zCgpTdW4gSmFuIDMxIDIyOjA2OjQ4IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHZhbGlkLltjaF0sIHRyZWUuYywgcGFyc2VyLmMgOiBtb3JlIHdvcmsgdG93YXJkIGZ1bGwgcGFyc2luZwoJICBvZiBYTUwgRFREcy4KCSogUkVBRE1FOiBhZGRlZCBpbmZvcm1hdGlvbnMgYWJvdXQgbWFpbGluZy1saXN0IGFuZCBvbi1saW5lCgkgIGRvY3VtZW50YXRpb24KCjE5OTktMDEtMjcgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBjb25maWd1cmUuaW4gKFhNTF9JTkNMVURFRElSKTogVXNlIC1JIG5vdCAtTCBmb3IgaW5jbHVkZXMuCgpTdW4gSmFuIDE3IDIwOjA2OjM2IENFVCAxOTk5IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCB0cmVlLltjaF0gOiBtb3JlIHdvcmsgdG93YXJkIGNvbmZvcm1hbmNlIHRlc3RpbmcsCgkgIGFkZGVkIGEgbGFzdCBlbGVtZW50IHRvIGFjY2VsZXJhdGUgcGFyc2luZyBvZiB2ZXJ5IGZsYXQgc3RydWN0dXJlcwoJICBzdGFydGVkIHdvcmtpbmcgb24gaW50ZXJuYWwgc3Vic2V0IEVsZW1lbnQgY29udGVudCBkZWNsYXJhdGlvbi4KCSogdmFsaWQuW2NoXSA6IGZpcnN0IGN1dCBhdCBhZGRpbmcgY29kZSB0b3dhcmQgdmFsaWRhdGlvbi4KCSogcHJldmlvdXMgY2hhbmdlcyBoYWQgYWxzbyBzbWFsbCBpbXBhY3Qgb24gbW9zdCBmaWxlcywgZXNwZWNpYWxseQoJICB0aGUgY29uZm9ybWFuY2UgdGVzdGluZyB1c2luZyBKYW1lcyBDbGFyayB0ZXN0IHN1aXRlLgoKU3VuIEphbiAxNyAxNDo0NTowNiBDRVQgMTk5OSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0ZXN0LyogOiB1cGRhdGVkIHRoZSBleGFtcGxlcywgbW9zdCBvZiB0aGVtIHdlcmUgbm90IHdlbGwKCSAgICAgICAgICAgZm9ybWVkIChodW1tKSwgYW5kIGFkZGVkIHJkZjIuCgkqIHJlc3VsdC8qIDogcmVzdWx0aW5nIGNoYW5nZXMgaW4gdGhlIG91dHB1dC4KClN1biBEZWMgIDYgMTM6MDY6NTggRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBjaGFuZ2VkIHRoZSBiZWhhdmlvdXIgb2YgeG1sR2V0UHJvcCBvbiBOVUxMIHZhbHVlcy4KClNhdCBEZWMgIDUgMTI6MjU6MDkgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBwYXRjaGVkIGEgYnVnIGluIHRoZSBnZW5lcmF0aW9uIG9mIGVtcHR5IGF0dHJpYnV0ZXMKCkZyaSBOb3YgMjcgMDE6MzY6NTQgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuW2NoXSwgdHJlZS5bY2hdLCB0ZXN0ZXIuYzogYWRkZWQgY29weSBpbnRlcmZhY2VzCgkgIGZvciBub2RlL3RyZWVzL2RvY3VtZW50cy8uLi4gQmlnZ2VzdCBwcm9ibGVtIGlzIG5hbWVzcGFjZQoJICBzdXBwb3J0IHdoZW4gY29weWluZyBzdWJ0cmVlcy4KClN1biBOb3YgMTUgMTk6NTk6NDcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmMsIGVudGl0aWVzLmM6IGltcHJvdmUgZW50aXRpZXMgYW5kIGNoYXIgcmVmIGVuY29kaW5nLAoJICBhbmQgY2xlYW51cHMgb2YgZXJyb3IgbWVzc2FnZXMuCgpGcmkgTm92IDEzIDEzOjAzOjEwIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jLCBlbnRpdGllcy5jOiBzaW1wbGUgYnVnIGh1bnRpbmcgZG9uZSBkdXJpbmcgcnBtMmh0bWwgYW5kCgkgIHJwbWZpbmQgaW50ZWdyYXRpb24uCgpTdW4gTm92ICA4IDEzOjExOjA3IEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5bY2hdOiBBZGRlZCBpbnRlcmZhY2VzIGFsbG93aW5nIHRvIHNwZWNpZnkgYSBTQVgKCSAgaGFuZGxlciBiZWZvcmUgcGFyc2luZy4KClN1biBOb3YgIDggMDk6Mzk6MTcgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogcGFyc2VyLmM6IHJlZGlycmVjdCBhbGwgZXJyb3JzIHJlcG9ydGluZyB0aHJvdWdoIHRoZSBTQVgKCSAgZXJyb3IgZnVuY3Rpb24KCldlZCBOb3YgIDQgMTQ6MjE6NTQgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYzogcmF0aGVyIHVzZSBIQVZFX1NOUFJJTlRGIGFuZCBub3QgZGVwZW5kIG9uIGdsaWIKCSogbGlidG9vbCwgdGxtYWluIC4uLjogdXBkYXRlIG9mIHRoZSBsaWJ0b29sIGZpbGVzCgoxOTk4LTExLTA0ICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogZW50aXRpZXMuYzogVXNlIGdfc25wcmludGYgaW5zdGVkYSBvZiBzbnByaW50Zi4KClN1biBOb3YgIDEgMTQ6MzE6MDYgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZW50aXRpZXMuYywgcGFyc2VyLmM6IGRlYnVnIGFuZCBjbGVhbnVwIG9mIENoYXJSZWYgaGFuZGxpbmcvc2F2aW5nLgoJICBhZGRlZCBlbnQ1IHRlc3QgZm9yIHRoaXMgcHVycG9zZS4KCSogcGFyc2VyLmMsIHBhcnNlci5oOiBmb3JtYXR0aW5nLCBjb21tZW50cyBhbmQgVVRGLTggcGxhbm5pbmcuCgpGcmkgT2N0IDMwIDAxOjM2OjUyIEVTVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBmaXhlZD8gYSBzdHJhbmdlIGVycm9yIGR1ZSB0byBjb21wcmVzc2lvbiBvbiBhIEdXUAoJICBkb2N1bWVudC4KClRodSBPY3QgMjkgMDA6NDg6NDUgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBidWcgZml4aW5nCgkqIGVudGl0aWVzLltjaF06IGRlZmluZWQgYSBzcGVjaWZpYyB0eXBlIGZvciBwcmVkZWZpbmVkIGVudGl0aWVzCgkqIGRvYy94bWwuaHRtbDogbW9yZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBsaWJyYXJ5LCBob3cgdG8gdXNlIGl0LAoJICBvdmVydmlldyBvZiB0aGUgaW50ZXJmYWNlcy4KCldlZCBPY3QgMjggMTc6NTY6MzUgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5bY2hdOiBtb3JlIGNsZWFudXAgb24gdGhlIEFQSSwgbWFkZSB0aGUgdHJlZSBtb3IgY29uZm9ybWFudC4KClR1ZSBPY3QgMjcgMTc6NTQ6MDAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5jOiBjb3JyZWN0ZWQgYSBzbWFsbCBidWcKCSogZG9jL3htbC5odG1sOiBjb250aW51aW5nIHdyaXRpbmcgZG9jdW1lbnRhdGlvbi4KClR1ZSBPY3QgMjcgMTc6NTQ6MDAgRVNUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogZGVidWdYTUwuaCBkZWJ1Z1hNTC5jOiBhZGRlZCBkZWJ1Z2dpbmcgdXRpbGl0aWVzLgoJKiB0ZXN0ZXIuYzogYWRkZWQgLS1kZWJ1ZyBzd2l0Y2guCgkqIHRyZWUuYzogcGF0Y2hlZCBhbiBpbmNvcnJlY3Qgbm9kZS0+dHlwZSBhc3NpZ25tZW50LgoJKiBwYXJzZXIuYzogZm9ybWF0dGluZywgZW5zdXJlIHRoYXQgbm9kZS0+ZG9jICE9IE5VTEwgaW4gYXR0cmlidXRlcwoKVHVlIE9jdCAyNyAwMToxNTozOSBFU1QgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuW2NoXSBTQVguYyB0cmVlLltjaF06IGxhcmdlIGFtb3VudCBvZiBjaGFuZ2VzIHRvIGltcHJvdmUKCSAgZW50aXR5IHN1cHBvcnQgYW5kIHByb3ZpZGUgYW4gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gY2xvc2UgdG8KCSAgRE9NIG9uZSAoZW50aXR5IHJlZiBub2RlcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZSBhcyB0cmVlKS4gSSB0cmllZAoJICB0byBwcmVzZXJ2ZSB0aGUgaW50ZXJmYWNlIGJ1dCB0aGlzIHdpbGwgc3VyZWx5IGJyZWFrIHNvbWUgYXBwcwoJICAoSSBoYXZlIHRvIGNoYW5nZSBycG0yaHRtbC9ycG1maW5kIGZvciBleGFtcGxlKS4gSSBoYWQgdG8gY2hhbmdlCgkgIHR3byBpbnRlcmZhY2VzLCBhbmQgdGhlIGdlbmVyYXRlZCB0cmVlIGlzIHNvbWV3aGF0IGRpZmZlcmVudC4KCSogZG9jLyogOiBzdGFydGVkIGRvY3VtZW50aW5nIHRoZSBYTUwgbGlicmFyeSwgdGhlIHRyZWUgYW5kCgkgIERPTS9Db3JiYS4gVGhpcyBpcyBhIGZpcnN0IHN0ZXAuCgpTYXQgT2N0IDI0IDE0OjIzOjUxIEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHBhcnNlci5jOiBTZXQgdXAgdGhlIGZvbmN0aW9ucyBjb21tZW50IGJsb2NrLCBib3JpbmcgYnV0IHVzZWZ1bC4KCSogcGFyc2VyLmgsIFNBWC5jLCBwYXJzZXIuYzogbm93IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZCB0aHJvdWdoCgkgIHRoZSBTQVggaW50ZXJmYWNlLiBUaGUgcHJvYmxlbSBpcyB0aGF0IG15IFNBWCBpbnRlcmZhY2UgZGl2ZXJnZWQKCSAgcXVpdGUgYSBiaXQgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCB3ZWxsIHRoaXMgaXMgbm90IGFuIG9mZmljaWFsCgkgIHNwZWMsIGFuZCB0cmFuc2xhdGluZyBpdCBmcm9tIEphdmEgdG8gQyBpcyBoYWlyeSBhbnl3YXkuLi4KClR1ZSBPY3QgMjAgMDI6MTE6MjEgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogU0FYLmMsIGVudGl0aWVzLmMsIHRyZWUuYywgZW5jb2RpbmcuYywgZXJyb3IuYzogU2V0IHVwIHRoZQoJICBmb25jdGlvbnMgY29tbWVudCBibG9jaywgYm9yaW5nIGJ1dCB1c2VmdWwuCgpTdW4gT2N0IDE4IDIwOjQwOjU4IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGVuY29kaW5nLltjaF0sIE1ha2VmaWxlLmFtOiBBZGRlZCB0aGUgVVRGLTgsIFVURi0xNiBhbmQgSVNPIExhdGluIDEKCSAgY29udmVyc2lvbiByb3V0aW5lcy4gSG93ZXZlciB0aGV5IGFyZSBub3QgeWV0IHVzZWQgdG8gY29udmVydCB0aGUKCSAgaW5wdXRzLiBUaGUgY29yZSB3aWxsIHJ1biB3aXRoIFVURi04LgoKU3VuIE9jdCAxOCAxNTowODoxOSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB0cmVlLmMgOiBtYWtlIHN1cmUgdGhhdCB0aGUgdHlwZSBpZCBpcyBwcm9wZXJseSBzZXQtdXAgd2hlbgoJICBhIG5ldyBvYmplY3QgaXMgYWxsb2NhdGVkLCBuZWVkZWQgZm9yIERPTS4KClNhdCBPY3QgMTcgMDI6NDM6MjEgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oLCB0cmVlLmM6IE9rLCB0aGUgbWFpbiBvYmplY3RzIGluIHRoZSB0cmVlIHdpbGwgYmUgbmF0aXZlCgkgIGNvcmJhIG9iamVjdHMsIGl0IGNvc3RzIDggYnl0ZXMgcGVyIE5vZGUsIEF0dHJpYnV0ZSBhbmQgRG9jdW1lbnQKCSAgYnV0IGl0IHNpbXBsaWZpZXMgdGhlIENvcmJhIGludGVncmF0aW9uIGEgbG90IChubyBleHRyYSBpbnRlcmZhY2UKCSAgb2JqZWN0cyB0byBhbGxvY2F0ZS9mcmVlKS4KClR1ZSBPY3QgMTMgMjE6NDY6NTcgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogdHJlZS5oLCB0cmVlLmMsIHBhcnNlci5jOiBhZGRlZCBwcmV2IGFuZCBkb2MgcG9pbnRlcnMgdG8gTm9kZSwKCSAgYW5kIGNoYW5nZWQgTk9ERXMgY29udGFudHMgZm9yIGNvbmZvcm1pdHkgd2l0aCBET00gTGV2ZWwgMQoKV2VkIE9jdCAgNyAyMzo0Mjo0NiBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCBob29rcyB0byBrZWVwIHRyYWNrIG9mIHNlcnZhbnRzIHdoZW4gY3JlYXRpbmcgb2JqZWN0cwoJICB4bWxEb2MgYW5kIHhtbE5vZGUgKGZvciBDb3JiYSBleHBvcnQpLgoKU3VuIE9jdCAgNCAwMzoxODowOSBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBhZGRlZCB4bWwtY29uZmlnIHNjcmlwdC4KClRodSBPY3QgIDEgMTY6MjI6MzcgRURUIDE5OTggRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYXV0b2dlbi5zaCA6IGFwcGxpZWQgcGF0Y2ggZnJvbSBGcmVkZXJpYyBEZXZlcm5heSA8ZGV2ZXJuYXlAaXN0YXIuZnI+CgkgIHRvIGF1dG91cGRhdGUgbGlidG9vbCBhbmQgYXV0b21ha2UgY29uZiBmaWxlcy4KCjE5OTgtMDktMzAgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBNYWtlZmlsZS5hbTogVXNlICc/JyB0byBzZXBhcmF0ZSB0aGUgc2VkCgljb21tYW5kcyBhcyAnLCcgaXMgdXNlZCB3aGVuIHBlb3BsZSBwYXNzIC1XbCxzb21ldGhpbmcuCgpUaHUgU2VwIDI0IDE1OjEzOjI5IEVEVCAxOTk4IERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIHRyZWUuYywgdHJlZS5oOiBhZGRlZCBhIHBlci1kb2N1bWVudCBjb21wcmVzc2lvbiBpbnRlcmZhY2UuCgpUdWUgU2VwIDIyIDIwOjQ3OjM4IEVEVCAxOTk4CgoJKiB0cmVlLmMsIHRyZWUuaDogYWRkZWQgc2F2aW5nIHdpdGggY29tcHJlc3Npb24gYW5kIGFkZGVkIGludGVyZmFjZXMKCSAgdG8gY29udHJvbCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgKHhtbEdldENvbXByZXNzTW9kZSwKCSAgeG1sU2V0Q29tcHJlc3NNb2RlKSBhbmQgYSBuZXcgc2F2ZSB0byBmaWxlbmFtZSBmdW5jdGlvbiAoeG1sU2F2ZUZpbGUpLgoKTW9uIFNlcCAyMSAyMDoxMToxMyBFRFQgMTk5OCBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiBwYXJzZXIuYzogY29ycmVjdGVkIGEgbG9vcCBmb3IgZmlsZXMgb2Ygc2l6ZSAwCgoxOTk4LTA4LTIwICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogZXJyb3IuaDogTmV3IGZpbGUuICBDb250YWlucyBwcm90b3R5ZXMgZnJvbSBgZXJyb3IuYycuCgpUaHUgQXVnIDEzIDE5OjAyOjM0IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmFtICh4bWxpbmNkaXIpOiBOZXcgbWFjcm8uCgkoeG1saW5jX0hFQURFUlMpOiBSZW5hbWVkIGZyb20gaW5jbHVkZV9IRUFERVJTLgoKVGh1IEF1ZyAxMyAwMDo0MDoxNCBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogYXBwbGllZCBzbWFsbCBwYXRjaCBvbiBudW1lcmljIGVudGl0aWVzIGZyb20KCSAgQ2hyaXN0b3BoZXIgQmxpenphcmQgPGJsaXp6YXJkQGFwcGxpZWR0aGVvcnkuY29tPgoKV2VkIEF1ZyAxMiAyMzoxMjo1OCBFRFQgMTk5OCAgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAdzMub3JnPgoKCSogTmV3IHJlbGVhc2UgMC4yLCByZW1vdmVkIHRoZSBvbGQgeG1sXyogZmlsZXMgc28gdGhhdCBpdCdzCgkgICAgY29oZXJlbnQgd2l0aCB0aGUgb3RoZXIgQ1ZTIGJhc2UgKFczQyksIGZhciBiZXR0ZXIgY29uZm9ybWFuY2UKCSAgICB0byBzdGFuZGFyZCwgbmV3IG5hbWVzcGFjZXMsIGRlY2VudCBlbnRpdGllcyBzdXBwb3J0LCBiZWdpbm5pbmcKCSAgICBvZiBhIFNBWC1saWtlIGludGVyZmFjZS4gTmVhcmx5IG5vdGhpbmcgbGVmdCBpbnRhY3QsIGV2ZW4gdGhlCgkgICAgdGVzdCBleGFtcGxlcyAuLi4KCjE5OTgtMDctMzAgIENocmlzdG9waGVyIEJsaXp6YXJkICA8YmxpenphcmRAYXBwbGllZHRoZW9yeS5jb20+CgoJKiAuY3ZzaWdub3JlOiBBZGQgLmRlcHMgZGlyCgpTdW4gSnVsIDI2IDE3OjI5OjUyIEVEVCAxOTk4ICBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEB3My5vcmc+CgoJKiB4bWxfdHJlZTogY2hhbmdlZCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lIGZvciBuYW1lIGluIHhtbE5ld05vZGUKClN1biBKdWwgMjYgMDA6MTc6NTEgRURUIDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgdGVzdCBmb3IgQ1BQCgkqIEFVVEhPUlMsIENoYW5nZWxvZzogdGhlIG9yaWdpbmFsIG9uZXMgZGlkbid0IGdldCBjb21taXRlZCBidXQgdGhlCgkgICAgZ2xpYiBvbmVzIGluc3RlYWQsIGZpeGVkLgoJKiBNYWtlZmlsZS5hbTogY29ycmVjdGVkIGFuIGVycm9yIGluIGxpYnJhcnkgbmFtaW5nCgpGcmkgSnVsIDI0IDE2OjQ3OjE0IDE5OTggIERhbmllbCBWZWlsbGFyZCA8RGFuaWVsLlZlaWxsYXJkQHczLm9yZz4KCgkqIGludGVncmF0ZWQgY29kZSBkZXZlbG9wcGVkIGF0IFczQwoJKiBjaGFuZ2VkIHRoZSBvcmlnaW5hbCBDb3B5cmlnaHQKCSogbWlncmF0ZWQgdG8gYXV0b21ha2UKCSogcHJlZml4ZWQgdGhlIGZpbGVuYW1lcyBieSB4bWxfIHRvIGF2b2lkIGZpbGVuYW1lIGNsYXNoZXMKCg==