RlVUVVJFDQoNCiAgKiBUT0RPOiBUaGUgbHdJUCBzb3VyY2UgY29kZSBtYWtlcyBzb21lIGludmFsaWQgYXNzdW1wdGlvbnMgb24gcHJvY2Vzc29yDQogICAgd29yZC1sZW5ndGgsIHN0b3JhZ2Ugc2l6ZXMgYW5kIGFsaWdubWVudC4gU2VlIHRoZSBtYWlsaW5nIGxpc3RzIGZvcg0KICAgIHByb2JsZW1zIHdpdGggZXhvdGVyaWMgKC9EU1ApIGFyY2hpdGVjdHVyZXMgc2hvd2luZyB0aGVzZSBwcm9ibGVtcy4NCiAgICBXZSBzdGlsbCBoYXZlIHRvIGZpeCBzb21lIG9mIHRoZXNlIGlzc3VlcyBuZWF0bHkuDQoNCiAgKiBUT0RPOiB0aGUgUFBQIGNvZGUgaXMgYnJva2VuIGluIGEgZmV3IHdheXMuIFRoZXJlIGFyZSBuYW1lc3BhY2UNCiAgICBjb2xsaXNpb25zIG9uIEJTRCBzeXN0ZW1zIGFuZCBtYW55IGFzc3VtcHRpb25zIG9uIHdvcmQtbGVuZ3RoDQogICAgKHNpemVvZihpbnQpKS4gSW4gcHBwLmMgYW4gYXNzdW1wdGlvbiBpcyBtYWRlIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YNCiAgICBhIHRocmVhZCBzdWJzeXN0ZW0uIEVpdGhlciBQUFAgbmVlZHMgdG8gYmUgbW92ZWQgdG8gY29udHJpYi9wb3J0cy8/Pz8NCiAgICBvciByZWFycmFuZ2VkIHRvIGJlIG1vcmUgZ2VuZXJpYy4NCg0KSElTVE9SWQ0KDQooQ1ZTIEhFQUQpDQoNCiAgKiBbRW50ZXIgbmV3IGNoYW5nZXMganVzdCBhZnRlciB0aGlzIGxpbmUgLSBkbyBub3QgcmVtb3ZlIHRoaXMgbGluZV0NCg0KICArKyBOZXcgZmVhdHVyZXM6DQoNCg0KICArKyBCdWdmaXhlczoNCg0KDQooU1RBQkxFLTEuMy4wKQ0KDQogICsrIE5ldyBmZWF0dXJlczoNCg0KICAyMDA4LTAzLTEwIEpvbmF0aGFuIExhcm1vdXINCiAgKiBpbmV0X2Noa3N1bS5jOiBBbGxvdyBjaG9pY2Ugb2Ygb25lIG9mIHRoZSBzYW1wbGUgYWxnb3JpdGhtcyB0byBiZQ0KICAgIG1hZGUgZnJvbSBsd2lwb3B0cy5oLiBGaXggY29tbWVudCBvbiBob3cgdG8gb3ZlcnJpZGUgTFdJUF9DSEtTVU0uDQoNCiAgMjAwOC0wMS0yMiBGculk6XJpYyBCZXJub24NCiAgKiB0Y3AuYywgdGNwX2luLmMsIHRjcC5oLCBvcHQuaDogUmVuYW1lIExXSVBfQ0FMQ1VMQVRFX0VGRl9TRU5EX01TUyBpbiANCiAgICBUQ1BfQ0FMQ1VMQVRFX0VGRl9TRU5EX01TUyB0byBoYXZlIGNvaGVyZW50IFRDUCBvcHRpb25zIG5hbWVzLg0KDQogIDIwMDgtMDEtMTQgRnLpZOlyaWMgQmVybm9uDQogICogcmF3YXBpLnR4dCwgYXBpX21zZy5jLCB0Y3AuYywgdGNwX2luLmMsIHRjcC5oOiBjaGFuZ2VzIGZvciB0YXNrICM3Njc1ICJFbmFibGUNCiAgICB0byByZWZ1c2UgZGF0YSBvbiBhIFRDUF9FVkVOVF9SRUNWIGNhbGwiLiBJbXBvcnRhbnQsIGJlaGF2aW9yIGNoYW5nZXMgZm9yIHRoZQ0KICAgIHRjcF9yZWN2IGNhbGxiYWNrIChzZWUgcmF3YXBpLnR4dCkuDQoNCiAgMjAwOC0wMS0xNCBGculk6XJpYyBCZXJub24sIE1hcmMgQ2hhbGFuZA0KICAqIGlwLmM6IEludGVncmF0ZSBwYXRjaCAjNjM2OSIgaXBfaW5wdXQgOiBjaGVja2luZyBiZWZvcmUgcmVhbGxvYyIuDQogIA0KICAyMDA4LTAxLTEyIEZy6WTpcmljIEJlcm5vbg0KICAqIHRjcGlwLmgsIHRjcGlwLmMsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiByZXBsYWNlIHRoZSBmaWVsZA0KICAgIG5ldGNvbm46OnNlbSBwZXIgbmV0Y29ubjo6b3BfY29tcGxldGVkIGxpa2Ugc3VnZ2VzdGVkIGZvciB0aGUgdGFzayAjNzQ5MA0KICAgICJBZGQgcmV0dXJuIHZhbHVlIHRvIHN5c19tYm94X3Bvc3QiLg0KDQogIDIwMDgtMDEtMTIgRnLpZOlyaWMgQmVybm9uDQogICogYXBpX21zZy5jLCBvcHQuaDogcmVwbGFjZSBERUZBVUxUX1JFQ1ZNQk9YX1NJWkUgcGVyIERFRkFVTFRfVENQX1JFQ1ZNQk9YX1NJWkUsDQogICAgREVGQVVMVF9VRFBfUkVDVk1CT1hfU0laRSBhbmQgREVGQVVMVF9SQVdfUkVDVk1CT1hfU0laRSAodG8gb3B0aW1pemUgcXVldWVzDQogICAgc2l6ZXMpLCBsaWtlIHN1Z2dlc3RlZCBmb3IgdGhlIHRhc2sgIzc0OTAgIkFkZCByZXR1cm4gdmFsdWUgdG8gc3lzX21ib3hfcG9zdCIuDQoNCiAgMjAwOC0wMS0xMCBGculk6XJpYyBCZXJub24NCiAgKiB0Y3BpcC5oLCB0Y3BpcC5jOiBhZGQgdGNwaXBfY2FsbGJhY2tfd2l0aF9ibG9jayBmdW5jdGlvbiBmb3IgdGhlIHRhc2sgIzc0OTANCiAgICAiQWRkIHJldHVybiB2YWx1ZSB0byBzeXNfbWJveF9wb3N0Ii4gdGNwaXBfY2FsbGJhY2sgaXMgYWx3YXlzIGRlZmluZWQgYXMNCiAgICAiYmxvY2tpbmciICgiYmxvY2siIHBhcmFtZXRlciA9IDEpLg0KDQogIDIwMDgtMDEtMTAgRnLpZOlyaWMgQmVybm9uDQogICogdGNwaXAuaCwgdGNwaXAuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IHJlcGxhY2UgdGhlIGZpZWxkDQogICAgbmV0Y29ubjo6bWJveCAoc3lzX21ib3hfdCkgcGVyIG5ldGNvbm46OnNlbSAoc3lzX3NlbV90KSBmb3IgdGhlIHRhc2sgIzc0OTANCiAgICAiQWRkIHJldHVybiB2YWx1ZSB0byBzeXNfbWJveF9wb3N0Ii4NCg0KICAyMDA4LTAxLTA1IEZy6WTpcmljIEJlcm5vbg0KICAqIHN5c19hcmNoLnR4dCwgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIHRjcGlwLmMsIHN5cy5oLCBvcHQuaDoNCiAgICBJbnRyb2R1Y2UgY2hhbmdlcyBmb3IgdGFzayAjNzQ5MCAiQWRkIHJldHVybiB2YWx1ZSB0byBzeXNfbWJveF9wb3N0IiB3aXRoIHNvbWUNCiAgICBtb2RpZmljYXRpb25zIGluIHRoZSBzeXNfbWJveCBhcGk6IHN5c19tYm94X25ldyB0YWtlIGEgInNpemUiIHBhcmFtZXRlcnMgd2hpY2gNCiAgICBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIHF1ZXJ5IGJ5IHRoZSBtYWlsYm94LiBUaGVyZSBpcyB0aHJlZSBkZWZpbmVzDQogICAgaW4gb3B0LmggdG8gaW5kaWNhdGUgc2l6ZXMgZm9yIHRjcGlwOjptYm94LCBuZXRjb25uOjpyZWN2bWJveCwgYW5kIGZvciB0aGUgDQogICAgbmV0Y29ubjo6YWNjZXB0bWJveC4gUG9ydCBtYWludGFpbmVycywgeW91IGNhbiBkZWNpZGUgdG8ganVzdCBhZGQgdGhpcyBuZXcgDQogICAgcGFyYW1ldGVyIGluIHlvdXIgaW1wbGVtZW50YXRpb24sIGJ1dCB0byBpZ25vcmUgaXQgdG8ga2VlcCB0aGUgcHJldmlvdXMgYmVoYXZpb3IuDQogICAgVGhlIG5ldyBzeXNfbWJveF90cnlwb3N0IGZ1bmN0aW9uIHJldHVybiBhIHZhbHVlIHRvIGtub3cgaWYgdGhlIG1haWxib3ggaXMNCiAgICBmdWxsIG9yIGlmIHRoZSBtZXNzYWdlIGlzIHBvc3RlZC4gVGFrZSBhIGxvb2sgdG8gc3lzX2FyY2gudHh0IGZvciBtb3JlIGRldGFpbHMuDQogICAgVGhpcyBuZXcgZnVuY3Rpb24gaXMgdXNlZCBpbiB0Y3BpcF9pbnB1dCAoc28sIGNhbiBiZSBjYWxsZWQgaW4gYW4gaW50ZXJydXB0DQogICAgY29udGV4dCBzaW5jZSB0aGUgZnVuY3Rpb24gaXMgbm90IGJsb2NraW5nKSwgYW5kIGluIHJlY3ZfdWRwIGFuZCByZWN2X3Jhdy4NCg0KICAyMDA4LTAxLTA0IEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQsIEpvbmF0aGFuIExhcm1vdXINCiAgKiByYXdhcGkudHh0LCBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYywgc29ja2V0cy5jLCB0Y3AuaCwgdGNwLmMsDQogICAgdGNwX2luLmMsIGluaXQuYywgb3B0Lmg6IHJlbmFtZSBiYWNrbG9nIG9wdGlvbnMgd2l0aCBUQ1BfIHByZWZpeCwgbGltaXQgdGhlDQogICAgImJhY2tsb2ciIHBhcmFtZXRlciBpbiBhbiB1OF90LCAwIGlzIGludGVycHJldGVkIGFzICJzbWFsbGVzdCBxdWV1ZSIsIGFkZA0KICAgIGRvY3VtZW50YXRpb24gaW4gdGhlIHJhd2FwaS50eHQgZmlsZS4NCg0KICAyMDA3LTEyLTMxIEtpZXJhbiBNYW5zbGV5IChiYXNlZCBvbiBwYXRjaCBmcm9tIFBlci1IZW5yaWsgTHVuZGJvbG0pDQogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmMsIHRjcC5oOiBBZGQgVENQIHBlcnNpc3QgdGltZXINCg0KICAyMDA3LTEyLTMxIEZy6WTpcmljIEJlcm5vbiwgTHVjYSBDZXJlc29saQ0KICAqIGF1dG9pcC5jLCBldGhhcnAuYzogaXBfYWRkci5oOiBJbnRlZ3JhdGUgcGF0Y2ggIzYzNDg6ICJCcm9hZGNhc3QgQVJQIHBhY2tldHMNCiAgICBpbiBhdXRvaXAiLiBUaGUgY2hhbmdlIGluIGV0aGFycF9yYXcgY291bGQgYmUgcmVtb3ZlZCwgc2luY2UgYWxsIGNhbGxzIHRvDQogICAgZXRoYXJwX3JhdyB1c2UgZXRoYnJvYWRjYXN0IGZvciB0aGUgImV0aGRzdF9hZGRyIiBwYXJhbWV0ZXIuIEJ1dCBpdCBjb3VsZCBiZQ0KICAgIHdyb25nIGluIHRoZSBmdXR1cmUuDQoNCiAgMjAwNy0xMi0zMCBGculk6XJpYyBCZXJub24sIFRvbSBFdmFucw0KICAqIGlwLmM6IEZpeCBidWcgIzIxODQ2ICJMd0lQIGRvZXNuJ3QgYXBwZWFyIHRvIHBlcmZvcm0gYW55IElQIFNvdXJjZSBBZGRyZXNzDQogICAgRmlsdGVyaW5nIiByZXBvcnRlZCBieSBUb20gRXZhbnMuDQoNCiAgMjAwNy0xMi0yMSBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0LCBKb25hdGhhbiBMYXJtb3VyDQogICogdGNwLmgsIG9wdC5oLCBhcGkuaCwgYXBpX21zZy5oLCB0Y3AuYywgdGNwX2luLmMsIGFwaV9saWIuYywgYXBpX21zZy5jLA0KICAgIHNvY2tldHMuYywgaW5pdC5jOiB0YXNrICM3MjUyOiBJbXBsZW1lbnQgVENQIGxpc3RlbiBiYWNrbG9nOiBXYXJuaW5nOiByYXcgQVBJDQogICAgYXBwbGljYXRpb25zIGhhdmUgdG8gY2FsbCAndGNwX2FjY2VwdGVkKHBjYiknIGluIHRoZWlyIGFjY2VwdCBjYWxsYmFjayB0bw0KICAgIGtlZXAgYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucy4NCg0KICAyMDA3LTEyLTEzIEZy6WTpcmljIEJlcm5vbg0KICAqIGFwaV9tc2cuYywgZXJyLmgsIGVyci5jLCBzb2NrZXRzLmMsIGRucy5jLCBkbnMuaDogcmVwbGFjZSAiZW51bSBkbnNfcmVzdWx0Ig0KICAgIGJ5IGVycl90IHR5cGUuIEFkZCBhIG5ldyBlcnJfdCBjb2RlICJFUlJfSU5QUk9HUkVTUyIuDQoNCiAgMjAwNy0xMi0xMiBGculk6XJpYyBCZXJub24NCiAgKiBkbnMuaCwgZG5zLmMsIG9wdC5oOiBtb3ZlIEROUyBvcHRpb25zIHRvIHRoZSAicmlnaHQiIHBsYWNlLiBNb3N0IHZpc2libGVzDQogICAgYXJlIHRoZSBvbmUgd2hpY2ggaGF2ZSByYW0gdXNhZ2UuDQoNCiAgMjAwNy0xMi0wNSBGculk6XJpYyBCZXJub24NCiAgKiBuZXRkYi5jOiBhZGQgYSBMV0lQX0ROU19BUElfSE9TVEVOVF9TVE9SQUdFIG9wdGlvbiB0byBkZWNpZGUgdG8gdXNlIGEgc3RhdGljDQogICAgc2V0IG9mIHZhcmlhYmxlcyAoPTApIG9yIGEgbG9jYWwgb25lICg9MSkuIEluIHRoaXMgbGFzdCBjYXNlLCB5b3VyIHBvcnQgc2hvdWxkDQogICAgcHJvdmlkZSBhIGZ1bmN0aW9uICJzdHJ1Y3QgaG9zdGVudCogc3lzX3RocmVhZF9ob3N0ZW50KCBzdHJ1Y3QgaG9zdGVudCogaCkiDQogICAgd2hpY2ggaGF2ZSB0byBkbyBhIGNvcHkgb2YgImgiIGFuZCByZXR1cm4gYSBwb2ludGVyIG9udCB0aGUgInBlci10aHJlYWQiIGNvcHkuDQoNCiAgMjAwNy0xMi0wMyBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGlwLmM6IGlwX2lucHV0OiBjaGVjayBpZiBhIHBhY2tldCBpcyBmb3IgaW5wIGZpcnN0IGJlZm9yZSBjaGVja2luZyBhbGwgb3RoZXINCiAgICBuZXRpZnMgb24gbmV0aWZfbGlzdCAoc3BlZWRzIHVwIHBhY2tldCByZWNlaXZpbmcgaW4gbW9zdCBjYXNlcykNCg0KICAyMDA3LTExLTMwIFNpbW9uIEdvbGRzY2htaWR0DQogICogdWRwLmMsIHJhdy5jOiB0YXNrICM3NDk3OiBTb3J0IGxpc3RzIChwY2IsIG5ldGlmLCAuLi4pIGZvciBmYXN0ZXIgYWNjZXNzDQogICAgVURQOiBtb3ZlIGEgKGNvbm5lY3RlZCkgcGNiIHNlbGVjdGVkIGZvciBpbnB1dCB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgb2YNCiAgICBwY2JzIHNvIHRoYXQgaXQgaXMgZm91bmQgZmFzdGVyIG5leHQgdGltZS4gU2FtZSBmb3IgUkFXIHBjYnMgdGhhdCBoYXZlIGVhdGVuDQogICAgYSBwYWNrZXQuDQoNCiAgMjAwNy0xMS0yOCBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGV0aGFycC5jLCBzdGF0cy5jLCBzdGF0cy5oLCBvcHQuaDogSW50cm9kdWNlZCBFVEhBUlBfU1RBVFMNCg0KICAyMDA3LTExLTI1IFNpbW9uIEdvbGRzY2htaWR0DQogICogZGhjcC5jOiBkaGNwX3VuZm9sZF9yZXBseSgpIHVzZXMgcGJ1Zl9jb3B5X3BhcnRpYWwgaW5zdGVhZCBvZiBpdHMgb3duIGNvcHkNCiAgICBhbGdvcml0aG0uDQoNCiAgMjAwNy0xMS0yNCBTaW1vbiBHb2xkc2NobWlkdA0KICAqIG5ldGRiLmgsIG5ldGRiLmMsIHNvY2tldHMuaC8uYzogTW92ZWQgbHdpcF9nZXRob3N0YnluYW1lIGZyb20gc29ja2V0cy5jDQogICAgdG8gdGhlIG5ldyBmaWxlIG5ldGRiLmM7IGluY2x1ZGVkIGx3aXBfZ2V0YWRkcmluZm8uDQoNCiAgMjAwNy0xMS0yMSBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHRjcC5oLCBvcHQuaCwgdGNwLmMsIHRjcF9pbi5jOiBpbXBsZW1lbnRlZCBjYWxjdWxhdGluZyB0aGUgZWZmZWN0aXZlIHNlbmQtbXNzDQogICAgYmFzZWQgb24gdGhlIE1UVSBvZiB0aGUgbmV0aWYgdXNlZCB0byBzZW5kLiBFbmFibGVkIGJ5IGRlZmF1bHQuIERpc2FibGUgYnkNCiAgICBzZXR0aW5nIExXSVBfQ0FMQ1VMQVRFX0VGRl9TRU5EX01TUyB0byAwLiBUaGlzIGZpeGVzIGJ1ZyAjMjE0OTIuDQoNCiAgMjAwNy0xMS0xOSBGculk6XJpYyBCZXJub24NCiAgKiBhcGlfbXNnLmMsIGRucy5oLCBkbnMuYzogSW1wbGVtZW50IEROU19ET0VTX05BTUVfQ0hFQ0sgb3B0aW9uIChjaGVjayBpZiBuYW1lDQogICAgcmVjZWl2ZWQgbWF0Y2ggdGhlIG5hbWUgcXVlcnkpLCBpbXBsZW1lbnQgRE5TX1VTRVNfU1RBVElDX0JVRiAodGhlIHBsYWNlIHdoZXJlDQogICAgY29weSBkbnMgcGF5bG9hZCB0byBwYXJzZSB0aGUgcmVzcG9uc2UpLCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8gcGxhY2UNCiAgICBmb3IgYSBuZXcgcXVlcnksIGFuZCBmaXggc29tZSBtaW5vciBwcm9ibGVtcy4NCg0KICAyMDA3LTExLTE2IFNpbW9uIEdvbGRzY2htaWR0DQogICogbmV3IGZpbGVzOiBpcHY0L2luZXQuYywgaXB2NC9pbmV0X2Noa3N1bS5jLCBpcHY2L2luZXQ2LmMNCiAgICByZW1vdmVkIGZpbGVzOiBjb3JlL2luZXQuYywgY29yZS9pbmV0Ni5jDQogICAgTW92ZWQgaW5ldCBmaWxlcyBpbnRvIGlwdjQvaXB2NiBkaXJlY3Rvcnk7IHNwbGl0dGVkIGluZXQuYy9pbmV0LmggaW50bw0KICAgIGluZXQgYW5kIGNoa3N1bSBwYXJ0OyBjaGFuZ2VkIGluY2x1ZGVzIGluIGFsbCBsd0lQIGZpbGVzIGFzIGFwcHJvcHJpYXRlDQoNCiAgMjAwNy0xMS0xNiBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGFwaS5oLCBhcGlfbXNnLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXQuaCwgc29ja2V0LmM6IEFkZGVkIHNlcXVlbnRpYWwNCiAgICBkbnMgcmVzb2x2ZXIgZnVuY3Rpb24gZm9yIG5ldGNvbm4gYXBpIChuZXRjb25uX2dldGhvc3RieW5hbWUpIGFuZCBzb2NrZXQgYXBpDQogICAgKGdldGhvc3RieW5hbWUvZ2V0aG9zdGJ5bmFtZV9yKS4NCg0KICAyMDA3LTExLTE1IEppbSBQZXR0aW5hdG8sIEZy6WTpcmljIEJlcm5vbg0KICAqIG9wdC5oLCBpbml0LmMsIHRjcGlwLmMsIGRoY3AuYywgZG5zLmgsIGRucy5jOiBhZGQgRE5TIGNsaWVudCBmb3Igc2ltcGxlIG5hbWUNCiAgICByZXF1ZXN0cyB3aXRoIFJBVyBhcGkgaW50ZXJmYWNlLiBJbml0aWFsaXphdGlvbiBpcyBkb25lIGluIGx3aXBfaW5pdCgpIHdpdGgNCiAgICBidWlsZCB0aW1lIG9wdGlvbnMuIEROUyB0aW1lciBpcyBhZGRlZCBpbiB0Y3BpcF90aHJlYWQgY29udGV4dC4gREhDUCBjYW4gc2V0DQogICAgRE5TIHNlcnZlciBpcCBhZGRyZXNzZXMgd2hlbiBvcHRpb25zIGFyZSByZWNlaXZlZC4gWW91IG5lZWQgdG8gc2V0IExXSVBfRE5TPTENCiAgICBpbiB5b3VyIGx3aXBvcHRzLmggZmlsZSAoTFdJUF9ETlM9MCBpbiBvcHQuaCkuIEROU19ERUJVRyBjYW4gYmUgc2V0IHRvIGdldA0KICAgIHNvbWUgdHJhY2VzIHdpdGggTFdJUF9ERUJVR0YuIFNhbml0eSBjaGVjayBoYXZlIGJlZW4gYWRkZWQuIFRoZXJlIGlzIGEgInRvZG8iDQogICAgbGlzdCB3aXRoIHBvaW50cyB0byBpbXByb3ZlLg0KDQogIDIwMDctMTEtMDYgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBvcHQuaCwgbWliMi5jOiBQYXRjaCAjNjIxNTogYWRkZWQgaWZBZG1pblN0YXR1cyB3cml0ZSBzdXBwb3J0IChpZiBleHBsaWNpdGx5DQogICAgZW5hYmxlZCBieSBkZWZpbmluZyBTTk1QX1NBRkVfUkVRVUVTVFMgdG8gMCk7IGFkZGVkIGNvZGUgdG8gY2hlY2sgbGluayBzdGF0dXMNCiAgICBmb3IgaWZPcGVyU3RhdHVzIGlmIExXSVBfTkVUSUZfTElOS19DQUxMQkFDSyBpcyBkZWZpbmVkLg0KDQogIDIwMDctMTEtMDYgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBhcGkuaCwgYXBpX21zZy5oIGFuZCBkZXBlbmRlbnQgZmlsZXM6IFRhc2sgIzc0MTA6IFJlbW92ZWQgdGhlIG5lZWQgdG8gaW5jbHVkZQ0KICAgIGNvcmUgaGVhZGVyIGZpbGVzIGluIGFwaS5oIChpcC90Y3AvdWRwL3Jhdy5oKSB0byBoaWRlIHRoZSBpbnRlcm5hbA0KICAgIGltcGxlbWVudGF0aW9uIGZyb20gbmV0Y29ubiBhcGkgYXBwbGljYXRpb25zLg0KDQogIDIwMDctMTEtMDMgRnLpZOlyaWMgQmVybm9uDQogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmMsIG9wdC5oOiBhZGQgU09fUkNWQlVGIG9wdGlvbiBmb3IgVURQICYNCiAgICBSQVcgbmV0Y29ubi4gWW91IG5lZWQgdG8gc2V0IExXSVBfU09fUkNWQlVGPTEgaW4geW91ciBsd2lwb3B0cy5oIChpdCdzIGRpc2FibGVkDQogICAgYnkgZGVmYXVsdCkuIE5ldGNvbm4gQVBJIHVzZXJzIGNhbiB1c2UgdGhlIG5ldGNvbm5fcmVjdl9idWZzaXplIG1hY3JvIHRvIGFjY2Vzcw0KICAgIGl0LiBUaGlzIGlzIGEgZmlyc3QgcmVsZWFzZSB3aGljaCBoYXZlIHRvIGJlIGltcHJvdmUgZm9yIFRDUC4gTm90ZSBpdCB1c2VkIHRoZQ0KICAgIG5ldGNvbm46OnJlY3ZfYXZhaWwgd2hpY2ggbmVlZCB0byBiZSBtb3JlICJ0aHJlYWQtc2FmZSIgKG5vdGUgdGhlcmUgaXMgYWxyZWFkeQ0KICAgIHRoZSBwcm9ibGVtIGZvciBGSU9OUkVBRCB3aXRoIGx3aXBfaW9jdGwvaW9jdGxzb2NrZXQpLg0KDQogIDIwMDctMTEtMDEgRnLpZOlyaWMgQmVybm9uLCBNYXJjIENoYWxhbmQNCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIHRjcC5oLCB0Y3Bfb3V0LmM6DQogICAgSW50ZWdyYXRlICJwYXRjaCAjNjI1MCA6IE1TR19NT1JFIGZsYWcgZm9yIHNlbmQiLiBNU0dfTU9SRSBpcyB1c2VkIGF0IHNvY2tldCBhcGkNCiAgICBsYXllciwgTkVUQ09OTl9NT1JFIGF0IG5ldGNvbm4gYXBpIGxheWVyLCBhbmQgVENQX1dSSVRFX0ZMQUdfTU9SRSBhdCByYXcgYXBpDQogICAgbGF5ZXIuIFRoaXMgb3B0aW9uIGVuYWJsZSB0byBkZWxheWVkIFRDUCBQVVNIIGZsYWcgb24gbXVsdGlwbGUgIndyaXRlIiBjYWxscy4NCiAgICBOb3RlIHRoYXQgcHJldmlvdXMgImNvcHkiIHBhcmFtZXRlciBmb3IgIndyaXRlIiBBUElzIGlzIG5vdyBjYWxsZWQgImFwaWZsYWdzIi4NCg0KICAyMDA3LTEwLTI0IEZy6WTpcmljIEJlcm5vbg0KICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYzogQWRkIG1hY3JvIEFQSV9FVkVOVCBpbiB0aGUgc2FtZSBzcGlyaXQgdGhhbiANCiAgICBUQ1BfRVZFTlRfeHh4IG1hY3JvcyB0byBnZXQgYSBjb2RlIG1vcmUgcmVhZGFibGUuIEl0IGNvdWxkIGFsc28gaGVscCB0byByZW1vdmUNCiAgICBzb21lIGNvZGUgKGxpa2Ugd2UgaGF2ZSB0YWxrIGluICJwYXRjaCAjNTkxOSA6IENyZWF0ZSBjb21waWxlIHN3aXRjaCB0byByZW1vdmUNCiAgICBzZWxlY3QgY29kZSIpLCBidXQgaXQgY291bGQgYmUgZG9uZSBsYXRlci4NCg0KICAyMDA3LTEwLTA4IFNpbW9uIEdvbGRzY2htaWR0DQogICogbWFueSBmaWxlczogQ2hhbmdlZCBpbml0aWFsaXphdGlvbjogbWFueSBpbml0IGZ1bmN0aW9ucyBhcmUgbm90IG5lZWRlZCBhbnkNCiAgICBtb3JlIHNpbmNlIHdlIG5vdyByZWx5IG9uIHRoZSBjb21waWxlciBpbml0aWFsaXppbmcgZ2xvYmFsIGFuZCBzdGF0aWMNCiAgICB2YXJpYWJsZXMgdG8gemVybyENCg0KICAyMDA3LTEwLTA2IFNpbW9uIEdvbGRzY2htaWR0DQogICogaXBfZnJhZy5jLCBtZW1wLmMsIG1pYjIuYywgaXBfZnJhZy5oLCBtZW1wX3N0ZC5oLCBvcHQuaDogQ2hhbmdlZCBJUF9SRUFTU0VNQkxZDQogICAgdG8gZW5xdWV1ZSB0aGUgcmVjZWl2ZWQgcGJ1ZnMgc28gdGhhdCBtdWx0aXBsZSBwYWNrZXRzIGNhbiBiZSByZWFzc2VtYmxlZA0KICAgIHNpbXVsdGFuZW91c2x5IGFuZCBubyBzdGF0aWMgcmVhc3NlbWJseSBidWZmZXIgaXMgbmVlZGVkLg0KDQogIDIwMDctMTAtMDUgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB0Y3BpcC5jLCBldGhhcnAuaCwgZXRoYXJwLmM6IG1vdmVkIGV0aGVybmV0X2lucHV0IGZyb20gdGNwaXAuYyB0byBldGhhcnAuYyBzbw0KICAgIGFsbCBuZXRpZnMgKG9yIHBvcnRzKSBjYW4gdXNlIGl0Lg0KDQogIDIwMDctMTAtMDUgRnLpZOlyaWMgQmVybm9uDQogICogbmV0aWZhcGkuaCwgbmV0aWZhcGkuYzogYWRkIGZ1bmN0aW9uIG5ldGlmYXBpX25ldGlmX3NldF9kZWZhdWx0LiBDaGFuZ2UgdGhlIA0KICAgIGNvbW1vbiBmdW5jdGlvbiB0byByZWR1Y2UgYSBsaXR0bGUgYml0IHRoZSBmb290cHJpbnQgKGZvciBhbGwgZnVuY3Rpb25zIHVzaW5nDQogICAgb25seSB0aGUgIm5ldGlmIiBwYXJhbWV0ZXIpLg0KDQogIDIwMDctMTAtMDMgRnLpZOlyaWMgQmVybm9uDQogICogbmV0aWZhcGkuaCwgbmV0aWZhcGkuYzogYWRkIGZ1bmN0aW9ucyBuZXRpZmFwaV9uZXRpZl9zZXRfdXAsIG5ldGlmYXBpX25ldGlmX3NldF9kb3duLA0KICAgIG5ldGlmYXBpX2F1dG9pcF9zdGFydCBhbmQgbmV0aWZhcGlfYXV0b2lwX3N0b3AuIFVzZSBhIGNvbW1vbiBmdW5jdGlvbiB0byByZWR1Y2UNCiAgICBhIGxpdHRsZSBiaXQgdGhlIGZvb3RwcmludCAoZm9yIGFsbCBmdW5jdGlvbnMgdXNpbmcgb25seSB0aGUgIm5ldGlmIiBwYXJhbWV0ZXIpLg0KDQogIDIwMDctMDktMTUgRnLpZOlyaWMgQmVybm9uDQogICogdWRwLmgsIHVkcC5jLCBzb2NrZXRzLmM6IENoYW5nZXMgZm9yICIjMjA1MDMgSUdNUCBJbXByb3ZlbWVudCIuIEFkZCBJUF9NVUxUSUNBU1RfSUYNCiAgICBvcHRpb24gaW4gc29ja2V0IEFQSSwgYW5kIGEgbmV3IGZpZWxkICJtdWx0aWNhc3RfaXAiIGluICJzdHJ1Y3QgdWRwX3BjYiIgKGZvcg0KICAgIG5ldGNvbm4gYW5kIHJhdyBBUEkgdXNlcnMpLCBvbmx5IGlmIExXSVBfSUdNUD0xLiBBZGQgZ2V0c29ja29wdCBwcm9jZXNzaW5nIGZvcg0KICAgIElQX01VTFRJQ0FTVF9UVEwgYW5kIElQX01VTFRJQ0FTVF9JRi4NCg0KICAyMDA3LTA5LTEwIEZy6WTpcmljIEJlcm5vbg0KICAqIHNubXAuaCwgbWliMi5jOiBlbmFibGUgdG8gcmVtb3ZlIFNOTVAgdGltZXIgKHdoaWNoIGNvbnN1bW5lIHNldmVyYWwgY3ljbGVzDQogICAgZXZlbiB3aGVuIGl0J3Mgbm90IG5lY2Vzc2FyeSkuIHNubXBfYWdlbnQudHh0IHRlbGwgdG8gY2FsbCBzbm1wX2luY19zeXN1cHRpbWUoKQ0KICAgIGVhY2ggMTBtcyAoYnV0LCBpdCdzIGludHJ1c2l2ZSBpZiB5b3UgdXNlIHN5c190aW1lb3V0IGZlYXR1cmUpLiBOb3csIHlvdSBjYW4NCiAgICBkZWNpZGUgdG8gY2FsbCBzbm1wX2FkZF9zeXN1cHRpbWUoMTAwKSBlYWNoIDEwMDBtcyAod2hpY2ggaXMgYmlnZ2VyICJzdGVwIiwgYnV0DQogICAgY2FsbCB0byBhIGxvd2VyIGZyZXF1ZW5jeSkuIE9yLCB5b3UgY2FuIGRlY2lkZSB0byBub3QgY2FsbCBzbm1wX2luY19zeXN1cHRpbWUoKQ0KICAgIG9yIHNubXBfYWRkX3N5c3VwdGltZSgpLCBhbmQgdG8gZGVmaW5lIHRoZSBTTk1QX0dFVF9TWVNVUFRJTUUoc3lzdXB0aW1lKSBtYWNyby4NCiAgICBUaGlzIG9uZSBpcyB1bmRlZmluZWQgYnkgZGVmYXVsdCBpbiBtaWIyLmMuIFNOTVBfR0VUX1NZU1VQVElNRSBpcyBjYWxsZWQgaW5zaWRlDQogICAgc25tcF9nZXRfc3lzdXB0aW1lKHUzMl90ICp2YWx1ZSksIGFuZCBlbmFibGUgdG8gY2hhbmdlICJzeXN1cHRpbWUiIHZhbHVlIG9ubHkNCiAgICB3aGVuIGl0J3MgcXVlcmllZCAoYW55IGRpcmVjdCBjYWxsIHRvICJzeXN1cHRpbWUiIGlzIGNoYW5nZWQgYnkgYSBjYWxsIHRvIA0KICAgIHNubXBfZ2V0X3N5c3VwdGltZSkuDQoNCiAgMjAwNy0wOS0wOSBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjDQogICogaWdtcC5oLCBpZ21wLmMsIG5ldGlmLmgsIG5ldGlmLmMsIGlwLmM6IFRvIGVuYWJsZSB0byBoYXZlIGludGVyZmFjZXMgd2l0aCBJR01QLA0KICAgIGFuZCBvdGhlcnMgd2l0aG91dCBpdCwgdGhlcmUgaXMgYSBuZXcgTkVUSUZfRkxBR19JR01QIGZsYWcgdG8gc2V0IGluIG5ldGlmLT5mbGFncw0KICAgIGlmIHlvdSB3YW50IElHTVAgb24gYW4gaW50ZXJmYWNlLiBpZ21wX3N0b3AoKSBpcyBub3cgY2FsbGVkIGluc2lkZSBuZXRpZl9yZW1vdmUoKS4NCiAgICBpZ21wX3JlcG9ydF9ncm91cHMoKSBpcyBub3cgY2FsbGVkIGluc2lkZSBuZXRpZl9zZXRfbGlua191cCgpIChuZWVkIHRvIGhhdmUNCiAgICBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0s9MSkgdG8gcmVzZW5kIHJlcG9ydHMgb25jZSB0aGUgbGluayBpcyB1cCAoYXZvaWQgdG8gd2FpdA0KICAgIHRoZSBuZXh0IHF1ZXJ5IG1lc3NhZ2UgdG8gcmVjZWl2ZSB0aGUgbWF0Y2hpbmcgbXVsdGljYXN0IHN0cmVhbXMpLg0KDQogIDIwMDctMDktMDggRnLpZOlyaWMgQmVybm9uDQogICogc29ja2V0cy5jLCBpcC5oLCBhcGkuaCwgdGNwLmg6IGRlY2xhcmUgYSAic3RydWN0IGlwX3BjYiIgd2hpY2ggb25seSBjb250YWlucw0KICAgIElQX1BDQi4gQWRkIGluIHRoZSBuZXRjb25uJ3MgInBjYiIgdW5pb24gYSAic3RydWN0IGlwX3BjYiAqaXA7IiAobm8gc2l6ZSBjaGFuZ2UpLg0KICAgIFVzZSB0aGlzIG5ldyBmaWVsZCB0byBhY2Nlc3MgdG8gY29tbW9uIHBjYiBmaWVsZHMgKHR0bCwgdG9zLCBzb19vcHRpb25zLCBldGMuLi4pLg0KICAgIEVuYWJsZSB0byBhY2Nlc3MgdG8gdGhlc2UgZmllbGRzIHdpdGggTFdJUF9UQ1A9MC4NCg0KICAyMDA3LTA5LTA1IEZy6WTpcmljIEJlcm5vbg0KICAqIHVkcC5jLCBpcHY0L2ljbXAuYywgaXB2NC9pcC5jLCBpcHY2L2ljbXAuYywgaXB2Ni9pcDYuYywgaXB2NC9pY21wLmgsDQogICAgaXB2Ni9pY21wLmgsIG9wdC5oOiBJbnRlZ3JhdGUgInRhc2sgIzcyNzIgOiBMV0lQX0lDTVAgb3B0aW9uIi4gVGhlIG5ldyBvcHRpb24NCiAgICBMV0lQX0lDTVAgZW5hYmxlL2Rpc2FibGUgSUNNUCBtb2R1bGUgaW5zaWRlIHRoZSBJUCBzdGFjayAoZW5hYmxlIHBlciBkZWZhdWx0KS4NCiAgICBCZSBjYXJlZnVsLCBkaXNhYmxpbmcgSUNNUCBtYWtlIHlvdXIgcHJvZHVjdCBub24tY29tcGxpYW50IHRvIFJGQzExMjIsIGJ1dA0KICAgIGhlbHAgdG8gcmVkdWNlIGZvb3RwcmludCwgYW5kIHRvIHJlZHVjZSAidmlzaWJpbGl0eSIgb24gdGhlIEludGVybmV0Lg0KDQogIDIwMDctMDktMDUgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYw0KICAqIG9wdC5oLCBzeXMuaCwgdGNwaXAuYywgc2xpcGlmLmMsIHBwcC5jLCBzeXNfYXJjaC50eHQ6IENoYW5nZSBwYXJhbWV0ZXJzIGxpc3QNCiAgICBmb3Igc3lzX3RocmVhZF9uZXcgKHNlZSAidGFzayAjNzI1MiA6IENyZWF0ZSBzeXNfdGhyZWFkX25ld19leCgpIikuIFR3byBuZXcNCiAgICBwYXJhbWV0ZXJzIGhhdmUgdG8gYmUgcHJvdmlkZWQ6IGEgdGFzayBuYW1lLCBhbmQgYSB0YXNrIHN0YWNrIHNpemUuIEZvciB0aGlzDQogICAgb25lLCBzaW5jZSBpdCdzIHBsYXRmb3JtIGRlcGVuZGFudCwgeW91IGNvdWxkIGRlZmluZSB0aGUgYmVzdCBvbmUgZm9yIHlvdSBpbg0KICAgIHlvdXIgbHdpcG9wdHMuaC4gRm9yIHBvcnQgbWFpbnRhaW5lcnMsIHlvdSBjYW4ganVzdCBhZGQgdGhlc2UgbmV3IHBhcmFtZXRlcnMNCiAgICBpbiB5b3VyIHN5c19hcmNoLmMgZmlsZSwgYW5kIGJ1dCBpdCdzIG5vdCBtYW5kYXRvcnksIHVzZSB0aGVtIGluIHlvdXIgT1MNCiAgICBzcGVjaWZpYyBmdW5jdGlvbnMuDQoNCiAgMjAwNy0wOS0wNSBGculk6XJpYyBCZXJub24NCiAgKiBpbmV0LmMsIGF1dG9pcC5jLCBtc2dfaW4uYywgbXNnX291dC5jLCBpbml0LmM6IE1vdmUgc29tZSBidWlsZCB0aW1lIGNoZWNraW5ncw0KICAgIGluc2lkZSBpbml0LmMgZm9yIHRhc2sgIzcxNDIgIlNhbml0eSBjaGVjayB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMiLg0KDQogIDIwMDctMDktMDQgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYw0KICAqIGlnbXAuaCwgaWdtcC5jLCBtZW1wX3N0ZC5oLCBtZW1wLmMsIGluaXQuYywgb3B0Lmg6IFJlcGxhY2UgbWVtX21hbGxvYyBjYWxsIGJ5DQogICAgbWVtcF9tYWxsb2MsIGFuZCB1c2UgYSBuZXcgTUVNUF9OVU1fSUdNUF9HUk9VUCBvcHRpb24gKHNlZSBvcHQuaCB0byBkZWZpbmUgdGhlDQogICAgdmFsdWUpLiBJdCB3aWxsIGF2b2lkIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIHByb2JsZW1zLCB1c2UgYSBjb3VudGVyIHRvIGtub3cNCiAgICBob3cgbWFueSB0aW1lcyBhIGdyb3VwIGlzIHVzZWQgb24gYW4gbmV0aWYsIGFuZCBmcmVlIGl0IHdoZW4gYWxsIGFwcGxpY2F0aW9ucw0KICAgIGxlYXZlIGl0LiBNRU1QX05VTV9JR01QX0dST1VQIGdvdCA4IGFzIGRlZmF1bHQgdmFsdWUgKGFuZCBpbml0LmMgZ290IGEgc2FuaXR5DQogICAgY2hlY2sgaWYgTFdJUF9JR01QIT0wKS4NCg0KICAyMDA3LTA5LTAzIEZy6WTpcmljIEJlcm5vbg0KICAqIGlnbXAuaCwgaWdtcC5jLCBzb2NrZXRzLmMsIGFwaV9tc2cuYzogQ2hhbmdlcyBmb3IgIiMyMDUwMyBJR01QIEltcHJvdmVtZW50Ii4NCiAgICBJbml0aWFsaXplIGlnbXBfbWFjX2ZpbHRlciB0byBOVUxMIGluIG5ldGlmX2FkZCAodGhpcyBmaWVsZCBzaG91bGQgYmUgc2V0IGluDQogICAgdGhlIG5ldGlmJ3MgImluaXQiIGZ1bmN0aW9uKS4gVXNlIHRoZSAiaW1yX2ludGVyZmFjZSIgZmllbGQgKGZvciBzb2NrZXQgbGF5ZXIpDQogICAgYW5kL29yIHRoZSAiaW50ZXJmYWNlIiBmaWVsZCAoZm9yIG5ldGNvbm4gbGF5ZXIpLCBmb3Igam9pbi9sZWF2ZSBvcGVyYXRpb25zLg0KICAgIFRoZSBpZ21wX2pvaW4vbGVhdmVncm91cCBmaXJzdCBwYXJhbWV0ZXIgY2hhbmdlIGZyb20gYSBuZXRpZiB0byBhbiBpcGFkZHIuDQogICAgVGhpcyBmaWVsZCBjb3VsZCBiZSBhIG5ldGlmJ3MgaXBhZGRyLCBvciAiYW55IiAoc2FtZSBtZWFuaW5nIHRoYW4gaXBfYWRkcl9pc2FueSkuDQoNCiAgMjAwNy0wOC0zMCBGculk6XJpYyBCZXJub24NCiAgKiBBZGQgbmV0YnVmLmgsIG5ldGJ1Zi5jLCBDaGFuZ2UgYXBpLmgsIGFwaV9saWIuYzogIzcyNDkgIlNwbGl0IG5ldGJ1ZiBmdW5jdGlvbnMNCiAgICBmcm9tIGFwaS9hcGlfbGliIi4gTm93IG5ldGJ1ZiBBUEkgaXMgaW5kZXBlbmRhbnQgb2YgbmV0Y29ubiwgYW5kIGNhbiBiZSB1c2VkDQogICAgd2l0aCBvdGhlciBBUEkgKGFwcGxpY2F0aW9uIGJhc2VkIG9uIHJhdyBBUEksIG9yIGZ1dHVyZSAic29ja2V0MiIgQVBJKS4gUG9ydHMNCiAgICBtYWludGFpbmVycyBqdXN0IGhhdmUgdG8gYWRkIHNyYy9hcGkvbmV0YnVmLmMgaW4gdGhlaXIgbWFrZWZpbGUvcHJvamVjdHMuDQoNCiAgMjAwNy0wOC0zMCBGculk6XJpYyBCZXJub24sIEpvbmF0aGFuIExhcm1vdXINCiAgKiBpbml0LmM6IEFkZCBmaXJzdCB2ZXJzaW9uIG9mIGx3aXBfc2FuaXR5X2NoZWNrIGZvciB0YXNrICM3MTQyICJTYW5pdHkgY2hlY2sNCiAgICB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMiLg0KDQogIDIwMDctMDgtMjkgRnLpZOlyaWMgQmVybm9uDQogICogaWdtcC5oLCBpZ21wLmMsIHRjcGlwLmMsIGluaXQuYywgbmV0aWYuYzogY2hhbmdlIGlnbXBfaW5pdCBhbmQgYWRkIGlnbXBfc3RhcnQuDQogICAgaWdtcF9zdGFydCBpcyBjYWxsIGluc2lkZSBuZXRpZl9hZGQuIE5vdywgaWdtcCBpbml0aWFsaXphdGlvbiBpcyBpbiB0aGUgc2FtZQ0KICAgIHNwaXJpdCB0aGFuIHRoZSBvdGhlcnMgbW9kdWxlcy4gTW9kaWZ5IHNvbWUgSUdNUCBkZWJ1ZyB0cmFjZXMuDQoNCiAgMjAwNy0wOC0yOSBGculk6XJpYyBCZXJub24NCiAgKiBBZGQgaW5pdC5oLCBpbml0LmMsIENoYW5nZSBvcHQuaCwgdGNwaXAuYzogVGFzayAgIzcyMTMgIkFkZCBhIGx3aXBfaW5pdCBmdW5jdGlvbiINCiAgICBBZGQgbHdpcF9pbml0IGZ1bmN0aW9uIHRvIHJlZ3JvdXAgYWxsIG1vZHVsZXMgaW5pdGlhbGl6YXRpb25zLCBhbmQgdG8gcHJvdmlkZQ0KICAgIGEgcGxhY2UgdG8gYWRkIGNvZGUgZm9yIHRhc2sgIzcxNDIgIlNhbml0eSBjaGVjayB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMiLg0KICAgIFBvcnRzIG1haW50YWluZXJzIHNob3VsZCByZW1vdmUgZGlyZWN0IGluaXRpYWxpemF0aW9ucyBjYWxscyBmcm9tIHRoZWlyIGNvZGUsDQogICAgYW5kIGFkZCBpbml0LmMgaW4gdGhlaXIgbWFrZWZpbGVzLiBOb3RlIHRoYXQgbHdpcF9pbml0KCkgZnVuY3Rpb24gaXMgY2FsbGVkDQogICAgaW5zaWRlIHRjcGlwX2luaXQsIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IHJhdyBhcGkgdXNlcnMgc2luY2UgYWxsIGNhbGxzIGFyZQ0KICAgIGRpc2FibGVkIHdoZW4gbWF0Y2hpbmcgb3B0aW9ucyBhcmUgZGlzYWJsZWQuIEFsc28gbm90ZSB0aGF0IHRoZWlyIGlzIG5ldyBvcHRpb25zDQogICAgaW4gb3B0LmgsIHlvdSBzaG91bGQgY29uZmlndXJlIGluIHlvdXIgbHdpcG9wdHMuaCAodGhleSBhcmUgZW5hYmxlZCBwZXIgZGVmYXVsdCkuDQoNCiAgMjAwNy0wOC0yNiBNYXJjIEJvdWNoZXINCiAgKiBhcGlfbXNnLmM6IGRvX2Nsb3NlX2ludGVybmFsKCk6IFJlc2V0IHRoZSBjYWxsYmFja3MgYW5kIGFyZyAoY29ubikgdG8gTlVMTA0KICAgIHNpbmNlIHRoZXkgY2FuIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBiZSBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIGNvbm4NCiAgICBwb2ludGVyIGFmdGVyIHRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGNsb3NlZCAoYW5kIGNvbm4gaGFzIGJlZW4gZnJlZWQpLiANCg0KICAyMDA3LTA4LTI1IEZy6WTpcmljIEJlcm5vbiAoQXJ0ZW0gTWlnYWV2J3MgUGF0Y2gpDQogICogbmV0aWYuaCwgbmV0aWYuYzogSW50ZWdyYXRlICJwYXRjaCAjNjE2MyA6IEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGxpbmsgbGF5ZXIgaXMgdXAiLg0KICAgIEFkZCBhIG5ldGlmX2lzX2xpbmtfdXAoKSBmdW5jdGlvbiBpZiBMV0lQX05FVElGX0xJTktfQ0FMTEJBQ0sgb3B0aW9uIGlzIHNldC4NCg0KICAyMDA3LTA4LTIyIEZy6WTpcmljIEJlcm5vbg0KICAqIG5ldGlmLmgsIG5ldGlmLmMsIG9wdC5oOiBSZW5hbWUgTFdJUF9ORVRJRl9DQUxMQkFDSyBpbiBMV0lQX05FVElGX1NUQVRVU19DQUxMQkFDSw0KICAgIHRvIGJlIGNvaGVyZW50IHdpdGggbmV3IExXSVBfTkVUSUZfTElOS19DQUxMQkFDSyBvcHRpb24gYmVmb3JlIG5leHQgcmVsZWFzZS4NCg0KICAyMDA3LTA4LTIyIEZy6WTpcmljIEJlcm5vbg0KICAqIHRjcGlwLmgsIHRjcGlwLmMsIGV0aGVybmV0aWYuYywgb3B0Lmg6IHJlbW92ZSBvcHRpb25zIEVUSEFSUF9UQ1BJUF9JTlBVVCAmDQogICAgRVRIQVJQX1RDUElQX0VUSElOUFVULCBub3csIG9ubHkgImV0aGlucHV0IiBjb2RlIGlzIHN1cHBvcnRlZCwgZXZlbiBpZiB0aGUgDQogICAgbmFtZSBpcyB0Y3BpcF9pbnB1dCAod2Uga2VlcCB0aGUgbmFtZSBvZiAxLjIuMCBmdW5jdGlvbikuDQoNCiAgMjAwNy0wOC0xNyBKYXJlZCBHcnViYg0KICAqIG1lbXBfc3RkLmgsIG1lbXAuaCwgbWVtcC5jLCBtZW0uYywgc3RhdHMuYzogKFRhc2sgIzcxMzYpIENlbnRyYWxpemUgbWVtcG9vbCANCiAgICBzZXR0aW5ncyBpbnRvIG5ldyBtZW1wX3N0ZC5oIGFuZCBvcHRpb25hbCB1c2VyIGZpbGUgbHdpcHBvb2xzLmguIFRoaXMgYWRkcw0KICAgIG1vcmUgZHluYW1pYyBtZW1wb29scywgYW5kIGFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUgYW4gYXJiaXRyYXJ5IG51bWJlciBvZg0KICAgIG1lbXBvb2xzIGZvciBtZW1fbWFsbG9jLg0KDQogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyDQogICogYXBpX21zZy5jOiBJbml0aWFsaXplIG5ld2Nvbm4tPnN0YXRlIHRvIE5FVENPTk5fTk9ORSBpbiBhY2NlcHRfZnVuY3Rpb247DQogICAgb3RoZXJ3aXNlIGl0IHdhcyBsZWZ0IHRvIE5FVENPTk5fQ0xPU0UgYW5kIHNlbnRfdGNwKCkgY291bGQgcHJlbWF0dXJlbHkNCiAgICBjbG9zZSB0aGUgY29ubmVjdGlvbi4NCg0KICAyMDA3LTA4LTE2IE1hcmMgQm91Y2hlcg0KICAqIHNvY2tldHMuYzogbHdpcF9hY2NlcHQoKTogY2hlY2sgbmV0Y29ubl9wZWVyKCkgZXJyb3IgcmV0dXJuLg0KDQogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyDQogICogbWVtLmMsIG1lbS5oOiBBZGRlZCBtZW1fY2FsbG9jKCkuDQoNCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXINCiAgKiB0Y3BpcC5jLCB0Y3BpcC5oIG1lbXAuYywgbWVtcC5oOiBBZGRlZCBkaXN0aW5jdCBtZW1wIChNRU1QX1RDUElQX01TR19JTlBLVCkNCiAgICBmb3IgaW5wdXQgcGFja2V0cyB0byBwcmV2ZW50IGZsb29kcyBmcm9tIGNvbnN1bWluZyBhbGwgb2YgTUVNUF9UQ1BJUF9NU0cNCiAgICBhbmQgc3RhcnZpbmcgb3RoZXIgbWVzc2FnZSB0eXBlcy4NCiAgICBSZW5hbWVkIE1FTVBfVENQSVBfTVNHIHRvIE1FTVBfVENQSVBfTVNHX0FQSQ0KDQogIDIwMDctMDgtMTYgTWFyYyBCb3VjaGVyDQogICogcGJ1Zi5jLCBwYnVmLmgsIGV0aGFycC5jLCB0Y3BfaW4uYywgc29ja2V0cy5jOiBTcGxpdCBwYnVmIGZsYWdzIGluIHBidWYNCiAgICB0eXBlIGFuZCBmbGdzIChsYXRlciByZW5hbWVkIHRvIGZsYWdzKS4NCiAgICBVc2UgZW51bSBwYnVmX2ZsYWcgYXMgcGJ1Zl90eXBlLiAgUmVudW1iZXIgUEJVRl9GTEFHXyouDQogICAgSW1wcm92ZWQgbHdpcF9yZWN2ZnJvbSgpLiAgVENQIHB1c2ggbm93IHByb3BhZ2F0ZWQuDQoNCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXINCiAgKiBldGhlcm5ldGlmLmMsIGNvbnRyaWIvcG9ydHMvdmFyaW91czogZXRoYnJvYWRjYXN0IG5vdyBhIHNoYXJlZCBnbG9iYWwNCiAgICBwcm92aWRlZCBieSBldGhhcnAuDQoNCiAgMjAwNy0wOC0xNiBNYXJjIEJvdWNoZXINCiAgKiBwcHBfb2UuYyBwcHBfb2UuaCwgYXV0aC5jIGNoYXAuYyBmc20uYyBsY3AuYyBwcHAuYyBwcHAuaCwNCiAgICBldGhhcnAuYyBldGhlcm5ldGlmLmMsIGV0aGFycC5oLCBvcHQuaCB0Y3BpcC5oLCB0Y3BpcC5jOg0KICAgIEFkZGVkIFBQUG9FIHN1cHBvcnQgYW5kIHZhcmlvdXMgUFBQIGltcHJvdmVtZW50cy4NCg0KICAyMDA3LTA3LTI1IFNpbW9uIEdvbGRzY2htaWR0DQogICogYXBpX2xpYi5jLCBpcF9mcmFnLmMsIHBidWYuYywgYXBpLmgsIHBidWYuaDogSW50cm9kdWNlZCBwYnVmX2NvcHlfcGFydGlhbCwNCiAgICBtYWtpbmcgbmV0YnVmX2NvcHlfcGFydGlhbCB1c2UgdGhpcyBmdW5jdGlvbi4NCg0KICAyMDA3LTA3LTI1IFNpbW9uIEdvbGRzY2htaWR0DQogICogdGNwX2luLmM6IEZpeCBidWcgIzIwNTA2OiBTbG93IHN0YXJ0IC8gaW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBzdGFydHMgd2l0aA0KICAgIDIgKiBtc3MgKGluc3RlYWQgb2YgMSAqIG1zcyBwcmV2aW91c2x5KSB0byBjb21wbHkgd2l0aCBzb21lIG5ld2VyIFJGQ3MgYW5kDQogICAgb3RoZXIgc3RhY2tzLg0KDQogIDIwMDctMDctMTMgSmFyZWQgR3J1YmIgKGludGVncmF0ZWQgYnkgRnLpZOlyaWMgQmVybm9uKQ0KICAqIG9wdC5oLCBuZXRpZi5oLCBuZXRpZi5jLCBldGhlcm5ldGlmLmM6IEFkZCBuZXcgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYWRkDQogICAgYSBsaW5rIGNhbGxiYWNrIGluIHRoZSBuZXRpZiBzdHJ1Y3QsIGFuZCBmdW5jdGlvbnMgdG8gaGFuZGxlIGl0LiBCZSBjYXJlZnVsbA0KICAgIGZvciBwb3J0IG1haW50YWluZXJzIHRvIGFkZCB0aGUgTkVUSUZfRkxBR19MSU5LX1VQIGZsYWcgKGxpa2UgaW4gZXRoZXJuZXRpZi5jKQ0KICAgIGlmIHlvdSB3YW50IHRvIGJlIHN1cmUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGZ1dHVyZSBjaGFuZ2VzLi4uDQoNCiAgMjAwNy0wNi0zMCBGculk6XJpYyBCZXJub24NCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYzogSW1wbGVtZW50IE1TR19QRUVLIGZsYWcgZm9yIHJlY3YvcmVjdmZyb20gZnVuY3Rpb25zLg0KDQogIDIwMDctMDYtMjEgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBldGhhcnAuaCwgZXRoYXJwLmM6IENvbWJpbmVkIGV0aGFycF9yZXF1ZXN0IHdpdGggZXRoYXJwX3JhdyBmb3IgYm90aA0KICAgIExXSVBfQVVUT0lQID0wIGFuZCA9MSB0byByZW1vdmUgcmVkdW5kYW50IGNvZGUuDQoNCiAgMjAwNy0wNi0yMSBTaW1vbiBHb2xkc2NobWlkdA0KICAqIG1lbS5jLCBtZW1wLmMsIG1lbS5oLCBtZW1wLmgsIG9wdC5oOiB0YXNrICM2ODYzOiBJbnRyb2R1Y2VkIHRoZSBvcHRpb24NCiAgICBNRU1fVVNFX1BPT0xTIHRvIHVzZSA0IHBvb2xzIHdpdGggZGlmZmVyZW50IHNpemVkIGVsZW1lbnRzIGluc3RlYWQgb2YgYQ0KICAgIGhlYXAuIFRoaXMgYm90aCBwcmV2ZW50cyBtZW1vcnkgZnJhZ21lbnRhdGlvbiBhbmQgZ2l2ZXMgYSBoaWdoZXIgc3BlZWQNCiAgICBhdCB0aGUgY29zdCBvZiBtb3JlIG1lbW9yeSBjb25zdW1wdGlvbi4gVHVybmVkIG9mZiBieSBkZWZhdWx0Lg0KDQogIDIwMDctMDYtMjEgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBhcGlfbGliLmMsIGFwaV9tc2cuYywgYXBpLmgsIGFwaV9tc2cuaDogQ29udmVydGVkIHRoZSBsZW5ndGggYXJndW1lbnQgb2YNCiAgICBuZXRjb25uX3dyaXRlIChhbmQgdGhlcmVmb3JlIGFsc28gYXBpX21zZ19tc2cubXNnLncubGVuKSBmcm9tIHUxNl90IGludG8NCiAgICBpbnQgdG8gYmUgYWJsZSB0byBzZW5kIGEgYmlnZ2VyIGJ1ZmZlciB0aGFuIDY0SyB3aXRoIG9uZSB0aW1lIChtYWlubHkNCiAgICB1c2VkIGZyb20gbHdpcF9zZW5kKS4NCg0KICAyMDA3LTA2LTIxIFNpbW9uIEdvbGRzY2htaWR0DQogICogdGNwLmgsIGFwaV9tc2cuYzogTW92ZWQgdGhlIG5hZ2xlIGFsZ29yaXRobSBmcm9tIG5ldGNvbm5fd3JpdGUvZG9fd3JpdGUNCiAgICBpbnRvIGEgZGVmaW5lICh0Y3Bfb3V0cHV0X25hZ2xlKSBpbiB0Y3AuaCB0byBwcm92aWRlIGl0IHRvIHJhdyBhcGkgdXNlcnMsIHRvby4NCg0KICAyMDA3LTA2LTIxIFNpbW9uIEdvbGRzY2htaWR0DQogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jOiBGaXhlZCBidWcgIzIwMDIxOiBNb3ZlZCBzZW5kYnVmLXByb2Nlc3NpbmcgaW4NCiAgICBuZXRjb25uX3dyaXRlIGZyb20gYXBpX2xpYi5jIHRvIGFwaV9tc2cuYyB0byBhbHNvIHByZXZlbnQgbXVsdGlwbGUgY29udGV4dC0NCiAgICBjaGFuZ2VzIG9uIGxvdyBtZW1vcnkgb3IgZW1wdHkgc2VuZC1idWZmZXIuDQoNCiAgMjAwNy0wNi0xOCBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGV0aGFycC5jLCBldGhhcnAuaDogQ2hhbmdlZCBldGhhcnAgdG8gdXNlIGEgZGVmaW5lZCBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aA0KICAgIG9mIDYgdG8gYXZvaWQgbG9hZGluZyBuZXRpZi0+aHdhZGRyX2xlbiBldmVyeSB0aW1lIChzaW5jZSB0aGlzIGZpbGUgaXMgb25seQ0KICAgIHVzZWQgZm9yIGV0aGVybmV0IGFuZCBzdHJ1Y3QgZXRoX2FkZHIgYWxyZWFkeSBoYWQgYSBkZWZpbmVkIGxlbmd0aCBvZiA2KS4NCg0KICAyMDA3LTA2LTE3IFNpbW9uIEdvbGRzY2htaWR0DQogICogc29ja2V0cy5jLCBzb2NrZXRzLmg6IEltcGxlbWVudGVkIHNvY2tldCBvcHRpb25zIFNPX05PX0NIRUNLIGZvciBVRFAgc29ja2V0cw0KICAgIHRvIGRpc2FibGUgVURQIGNoZWNrc3VtIGdlbmVyYXRpb24gb24gdHJhbnNtaXQuDQoNCiAgMjAwNy0wNi0xMyBGculk6XJpYyBCZXJub24sIFNpbW9uIEdvbGRzY2htaWR0DQogICogZGVidWcuaCwgYXBpX21zZy5jOiBjaGFuZ2UgTFdJUF9FUlJPUiB0byB1c2UgaXQgdG8gY2hlY2sgZXJyb3JzIGxpa2UgaW52YWxpZA0KICAgIHBvaW50ZXJzIG9yIHBhcmFtZXRlcnMsIGFuZCBsZXQgdGhlIHBvc3NpYmlsaXR5IHRvIHJlZGVmaW5lZCBpdCBpbiBjYy5oLiBVc2UNCiAgICB0aGlzIG1hY3JvIHRvIGNoZWNrICJjb25uIiBwYXJhbWV0ZXIgaW4gYXBpX21zZy5jIGZ1bmN0aW9ucy4NCg0KICAyMDA3LTA2LTExIFNpbW9uIEdvbGRzY2htaWR0DQogICogc29ja2V0cy5jLCBzb2NrZXRzLmg6IEFkZGVkIFVEUCBsaXRlIHN1cHBvcnQgZm9yIHNvY2tldHMNCg0KICAyMDA3LTA2LTEwIFNpbW9uIEdvbGRzY2htaWR0DQogICogdWRwLmgsIG9wdC5oLCBhcGlfbXNnLmMsIGlwLmMsIHVkcC5jOiBJbmNsdWRlZCBzd2l0Y2ggTFdJUF9VRFBMSVRFIChlbmFibGVkDQogICAgYnkgZGVmYXVsdCkgdG8gc3dpdGNoIG9mZiBVRFAtTGl0ZSBzdXBwb3J0IGlmIG5vdCBuZWVkZWQgKHJlZHVjZXMgdWRwLmMgY29kZQ0KICAgIHNpemUpDQoNCiAgMjAwNy0wNi0wOSBEb21pbmlrIFNwaWVzIChpbnRlZ3JhdGVkIGJ5IEZy6WTpcmljIEJlcm5vbikNCiAgKiBhdXRvaXAuaCwgYXV0b2lwLmMsIGRoY3AuaCwgZGhjcC5jLCBuZXRpZi5oLCBuZXRpZi5jLCBldGhhcnAuaCwgZXRoYXJwLmMsIG9wdC5oOg0KICAgIEF1dG9JUCBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgZm9yIElQdjQsIHdpdGggbmV3IG9wdGlvbnMgTFdJUF9BVVRPSVAgYW5kDQogICAgTFdJUF9ESENQX0FVVE9JUF9DT09QIGlmIHlvdSB3YW50IHRvIGNvb3BlcmF0ZSB3aXRoIERIQ1AuIFNvbWUgdGlwcyB0byBhZGFwdA0KICAgIChzZWUgVE9ETyBtYXJrIGluIHRoZSBzb3VyY2UgY29kZSkuDQoNCiAgMjAwNy0wNi0wOSBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGV0aGFycC5oLCBldGhhcnAuYywgZXRoZXJuZXRpZi5jOiBNb2RpZmllZCBvcmRlciBvZiBwYXJhbWV0ZXJzIGZvcg0KICAgIGV0aGFycF9vdXRwdXQoKSB0byBtYXRjaCBuZXRpZi0+b3V0cHV0IHNvIGV0aGFycF9vdXRwdXQoKSBjYW4gYmUgdXNlZA0KICAgIGRpcmVjdGx5IGFzIG5ldGlmLT5vdXRwdXQgdG8gc2F2ZSBvbmUgZnVuY3Rpb24gY2FsbC4NCg0KICAyMDA3LTA2LTA4IFNpbW9uIEdvbGRzY2htaWR0DQogICogbmV0aWYuaCwgZXRoZXJuZXRpZi5jLCBzbGlwaWYuYywgbG9vcGlmLmM6IEFkZGVkIGRlZmluZQ0KICAgIE5FVElGX0lOSVRfU05NUChuZXRpZiwgdHlwZSwgc3BlZWQpIHRvIGluaXRpYWxpemUgcGVyLW5ldGlmIHNubXAgdmFyaWFibGVzLA0KICAgIGFkZGVkIGluaXRpYWxpemF0aW9uIG9mIHRob3NlIHRvIGV0aGVybmV0aWYsIHNsaXBpZiBhbmQgbG9vcGlmLg0KDQogIDIwMDctMDUtMTggU2ltb24gR29sZHNjaG1pZHQNCiAgKiBvcHQuaCwgaXBfZnJhZy5jLCBpcF9mcmFnLmgsIGlwLmM6IEFkZGVkIG9wdGlvbiBJUF9GUkFHX1VTRVNfU1RBVElDX0JVRg0KICAgIChkZWZhdWx0aW5nIHRvIG9mZiBmb3Igbm93KSB0aGF0IGNhbiBiZSBzZXQgdG8gMCB0byBzZW5kIGZyYWdtZW50ZWQNCiAgICBwYWNrZXRzIGJ5IHBhc3NpbmcgUEJVRl9SRUZzIGRvd24gdGhlIHN0YWNrLg0KDQogIDIwMDctMDUtMjMgRnLpZOlyaWMgQmVybm9uDQogICogYXBpX2xpYi5jOiBJbXBsZW1lbnQgU09fUkNWVElNRU8gZm9yIGFjY2VwdCBhbmQgcmVjdiBvbiBUQ1ANCiAgICBjb25uZWN0aW9ucywgc3VjaCBwcmVzZW50IGluIHBhdGNoICM1OTU5Lg0KDQogIDIwMDctMDUtMjMgRnLpZOlyaWMgQmVybm9uDQogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IGdyb3VwIHRoZSBkaWZmZXJlbnQgTkVUQ09OTl9VRFB4eHgNCiAgICBjb2RlIGluIG9ubHkgb25lIHBhcnQuLi4NCg0KICAyMDA3LTA1LTE4IFNpbW9uIEdvbGRzY2htaWR0DQogICogb3B0LmgsIG1lbXAuaCwgbWVtcC5jOiBBZGRlZCBvcHRpb24gTUVNUF9PVkVSRkxPV19DSEVDSyB0byBjaGVjayBmb3IgbWVtcA0KICAgIGVsZW1lbnRzIHRvIG92ZXJmbG93LiBUaGlzIGlzIGFjaGlldmVkIGJ5IGFkZGluZyBzb21lIGJ5dGVzIGJlZm9yZSBhbmQgYWZ0ZXINCiAgICBlYWNoIHBvb2wgZWxlbWVudCAoaW5jcmVhc2luZyB0aGVpciBzaXplLCBvZiBjb3Vyc2UpLCBmaWxsaW5nIHRoZW0gd2l0aCBhDQogICAgcHJvbWluZW50IHZhbHVlIGFuZCBjaGVja2luZyB0aGVtIG9uIGZyZWVpbmcgdGhlIGVsZW1lbnQuDQogICAgU2V0IGl0IHRvIDIgdG8gYWxzbyBjaGVjayBldmVyeSBlbGVtZW50IGluIGV2ZXJ5IHBvb2wgZWFjaCB0aW1lIG1lbXBfbWFsbG9jKCkNCiAgICBvciBtZW1wX2ZyZWUoKSBpcyBjYWxsZWQgKHNsb3dlciBidXQgbW9yZSBoZWxwZnVsKS4NCg0KICAyMDA3LTA1LTEwIFNpbW9uIEdvbGRzY2htaWR0DQogICogb3B0LmgsIG1lbXAuaCwgbWVtcC5jLCBwYnVmLmMgKHNlZSB0YXNrICM2ODMxKTogdXNlIGEgbmV3IG1lbXAgcG9vbCBmb3INCiAgICBQQlVGX1BPT0wgcGJ1ZnMgaW5zdGVhZCBvZiB0aGUgb2xkIHBvb2wgaW1wbGVtZW50YXRpb24gaW4gcGJ1Zi5jIHRvIHJlZHVjZQ0KICAgIGNvZGUgc2l6ZS4NCg0KICAyMDA3LTA1LTExIEZy6WTpcmljIEJlcm5vbg0KICAqIHNvY2tldHMuYywgYXBpX2xpYi5jLCBhcGlfbXNnLmgsIGFwaV9tc2cuYywgbmV0aWZhcGkuaCwgbmV0aWZhcGkuYywgdGNwaXAuYzoNCiAgICBJbmNsdWRlIGEgZnVuY3Rpb24gcG9pbnRlciBpbnN0ZWFkIG9mIGEgdGFibGUgaW5kZXggaW4gdGhlIG1lc3NhZ2UgdG8gcmVkdWNlDQogICAgZm9vdHByaW50LiBEaXNhYmxlIHNvbWUgcGFydCBvZiBsd2lwX3NlbmQgYW5kIGx3aXBfc2VuZHRvIGlmIHNvbWUgb3B0aW9ucyBhcmUNCiAgICBub3Qgc2V0IChMV0lQX1RDUCwgTFdJUF9VRFAsIExXSVBfUkFXKS4NCg0KICAyMDA3LTA1LTEwIFNpbW9uIEdvbGRzY2htaWR0DQogICogKi5oIChleGNlcHQgbmV0aWYvcHBwLyouaCk6IEluY2x1ZGVkIHBhdGNoICM1NDQ4OiBpbmNsdWRlICcjaWZkZWYgX19jcGx1c3BsdXMNCiAgICBcIGV4dGVybiAiQyIgeycgaW4gYWxsIGhlYWRlciBmaWxlcy4gTm93IHlvdSBjYW4gd3JpdGUgeW91ciBhcHBsaWNhdGlvbiB1c2luZw0KICAgIHRoZSBsd0lQIHN0YWNrIGluIEMrKyBhbmQgc2ltcGx5ICNpbmNsdWRlIHRoZSBjb3JlIGZpbGVzLiBOb3RlIEkgaGF2ZSBsZWZ0DQogICAgb3V0IHRoZSBuZXRpZi9wcHAvKmggaGVhZGVyIGZpbGVzIGZvciBub3csIHNpbmNlIEkgZG9uJ3Qga25vdyB3aGljaCBmaWxlcyBhcmUNCiAgICBpbmNsdWRlZCBieSBhcHBsaWNhdGlvbnMgYW5kIHdoaWNoIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuDQoNCiAgMjAwNy0wNS0wOSBTaW1vbiBHb2xkc2NobWlkdA0KICAqIG9wdC5oLCAqLmMvKi5oOiBJbmNsdWRlZCBwYXRjaCAjNTkyMDogQ3JlYXRlIGRlZmluZSB0byBvdmVycmlkZSBDLWxpYnJhcnkNCiAgICBtZW1jcHkuIDIgRGVmaW5lcyBhcmUgY3JlYXRlZDogTUVNQ1BZKCkgZm9yIG5vcm1hbCBtZW1jcHksIFNNRU1DUFkoKSBmb3INCiAgICBzaXR1YXRpb25zIHdoZXJlIHNvbWUgY29tcGlsZXJzIG1pZ2h0IGlubGluZSB0aGUgY29weSBhbmQgc2F2ZSBhIGZ1bmN0aW9uDQogICAgY2FsbC4gQWxzbyByZXBsYWNlZCBhbGwgY2FsbHMgdG8gbWVtY3B5KCkgd2l0aCBjYWxscyB0byAoUylNRU1DUFkoKS4NCg0KICAyMDA3LTA1LTA4IFNpbW9uIEdvbGRzY2htaWR0DQogICogbWVtLmg6IElmIE1FTV9MSUJDX01BTExPQz09MSwgYWxsb3cgdGhlIGRlZmluZXMgKGUuZy4gbWVtX21hbGxvYygpIC0+IG1hbGxvYygpKQ0KICAgIHRvIGJlIG92ZXJyaWRlbiBpbiBjYXNlIHRoZSBDLWxpYnJhcnkgbWFsbG9jIGltcGxlbWVudGF0aW9uIGlzIG5vdCBwcm90ZWN0ZWQNCiAgICBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzLg0KDQogIDIwMDctMDUtMDQgU2ltb24gR29sZHNjaG1pZHQgKEF0dGUgS29qbykNCiAgKiBldGhhcnAuYzogSW50cm9kdWNlZCBmYXN0IG9uZS1lbnRyeS1jYWNoZSB0byBzcGVlZCB1cCBBUlAgbG9va3VwIHdoZW4gc2VuZGluZw0KICAgIG11bHRpcGxlIHBhY2tldHMgdG8gdGhlIHNhbWUgaG9zdC4NCg0KICAyMDA3LTA1LTA0IEZy6WTpcmljIEJlcm5vbiwgSm9uYXRoYW4gTGFybW91cg0KICAqIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmM6IEZpeCBidWcgIzE5MTYyICJsd2lwX3NlbnRvOiBhIHBvc3NpYmxlDQogICAgdG8gY29ycnVwdCByZW1vdGUgYWRkci9wb3J0IGNvbm5lY3Rpb24gc3RhdGUiLiBSZWR1Y2UgcHJvYmxlbXMgIm5vdCBlbm91Z2h0IG1lbW9yeSIgd2l0aA0KICAgIG5ldGJ1ZiAoaWYgd2UgcmVjZWl2ZSBsb3Qgb2YgZGF0YWdyYW1zKS4gSW1wcm92ZSBsd2lwX3NlbmR0byAob25seSBvbmUgZXhjaGFuZ2UgYmV0d2Vlbg0KICAgIHNvY2tldHMgYXBpIGFuZCBhcGlfbXNnIHdoaWNoIHJ1biBpbiB0Y3BpcF90aHJlYWQgY29udGV4dCkuIEFkZCBuZXRjb25uX3NlbnRvIGZ1bmN0aW9uLg0KICAgIFdhcm5pbmcsIGlmIHlvdSBkaXJlY3RseSBhY2Nlc3MgdG8gImZyb21hZGRyIiAmICJmcm9tcG9ydCIgZmllbGQgZnJvbSBuZXRidWYgc3RydWN0LA0KICAgIHRoZXNlIGZpZWxkcyBhcmUgbm93IHJlbmFtZWQgImFkZHIiICYgInBvcnQiLg0KDQogIDIwMDctMDQtMTEgSm9uYXRoYW4gTGFybW91cg0KICAqIHN5cy5oLCBhcGlfbGliLmM6IFByb3ZpZGUgbmV3IHN5c19tYm94X3RyeWZldGNoIGZ1bmN0aW9uLiBSZXF1aXJlIHBvcnRzIHRvIHByb3ZpZGUgbmV3DQogICAgc3lzX2FyY2hfbWJveF90cnlmZXRjaCBmdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIGlmIG9uZSBpcyB0aGVyZSwgb3RoZXJ3aXNlIHJldHVybg0KICAgIHdpdGggU1lTX01CT1hfRU1QVFkuIHN5c19hcmNoX21ib3hfdHJ5ZmV0Y2ggY2FuIGJlIGltcGxlbWVudGVkIGFzIGEgZnVuY3Rpb24tbGlrZSBtYWNybw0KICAgIGJ5IHRoZSBwb3J0IGluIHN5c19hcmNoLmggaWYgZGVzaXJlZC4NCg0KICAyMDA3LTA0LTA2IEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBvcHQuaCwgdGNwaXAuaCwgdGNwaXAuYywgbmV0aWZhcGkuaCwgbmV0aWZhcGkuYzogTmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIExXSVBfTkVUSUZfQVBJDQogICAgYWxsb3cgdG8gdXNlIHRocmVhZC1zYWZlIGZ1bmN0aW9ucyB0byBhZGQvcmVtb3ZlIG5ldGlmIGluIGxpc3QsIGFuZCB0byBzdGFydC9zdG9wIGRoY3ANCiAgICBjbGllbnRzLCB1c2luZyBuZXcgZnVuY3Rpb25zIGZyb20gbmV0aWZhcGkuaC4gRGlzYWJsZSBhcyBkZWZhdWx0IChubyBwb3J0IGNoYW5nZSB0byBkbykuDQoNCiAgMjAwNy0wNC0wNSBGculk6XJpYyBCZXJub24NCiAgKiBzb2NrZXRzLmM6IHJlbXBsYWNlIEVOT0JVRlMgZXJyb3JzIG9uIGFsbG9jX3NvY2tldCBieSBFTkZJTEUgdG8gYmUgbW9yZSBCU0QgY29tcGxpYW50Lg0KDQogIDIwMDctMDQtMDQgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBhcmNoLmgsIGFwaV9tc2cuYywgZGhjcC5jLCBtc2dfaW4uYywgc29ja2V0cy5jOiBJbnRyb2R1Y2VkICNkZWZpbmUgTFdJUF9VTlVTRURfQVJHKHgpDQogICAgdXNlIHRoaXMgZm9yIGFuZCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZm9ybSB0byB0ZWxsIHRoZSBjb21waWxlciB5b3UgaW50ZW50aW9uYWxseQ0KICAgIGFyZSBub3QgdXNpbmcgdGhpcyB2YXJpYWJsZS4gQ2FuIGJlIG92ZXJyaWRlbiBpbiBjYy5oLg0KDQogIDIwMDctMDMtMjggRnLpZOlyaWMgQmVybm9uDQogICogb3B0LmgsIG5ldGlmLmgsIGRoY3AuaCwgZGhjcC5jOiBOZXcgY29uZmlndXJhdGlvbiBvcHRpb24gTFdJUF9ORVRJRl9IT1NUTkFNRSBhbGxvdyB0bw0KICAgIGRlZmluZSBhIGhvc3RuYW1lIGluIG5ldGlmIHN0cnVjdCAodGhpcyBpcyBqdXN0IGEgcG9pbnRlciwgc28sIHlvdSBjYW4gdXNlIGEgaGFyZGNvZGVkDQogICAgc3RyaW5nLCBwb2ludCBvbiBvbmUgb2YgeW91cidzIGV0aGVybmV0aWYgZmllbGQsIG9yIGFsbG9jIGEgc3RyaW5nIHlvdSB3aWxsIGZyZWUgeW91cnNlbGYpLg0KICAgIEl0IHdpbGwgYmUgdXNlZCBieSBESENQIHRvIHJlZ2lzdGVyIGEgY2xpZW50IGhvc3RuYW1lLCBidXQgY2FuIGFsc28gYmUgdXNlIHdoZW4geW91IGNhbGwNCiAgICBzbm1wX3NldF9zeXNuYW1lLg0KDQogIDIwMDctMDMtMjggRnLpZOlyaWMgQmVybm9uDQogICogbmV0aWYuaCwgbmV0aWYuYzogQSBuZXcgTkVUSUZfRkxBR19FVEhBUlAgZmxhZyBpcyBkZWZpbmVkIGluIG5ldGlmLmgsIHRvIGFsbG93IHRvIA0KICAgIGluaXRpYWxpemUgYSBuZXR3b3JrIGludGVyZmFjZSdzIGZsYWcgd2l0aC4gSXQgdGVsbCB0aGlzIGludGVyZmFjZSBpcyBhbiBldGhlcm5ldA0KICAgIGRldmljZSwgYW5kIHdlIGNhbiB1c2UgQVJQIHdpdGggaXQgdG8gZG8gYSAiZ3JhdHVpdG91cyBBUlAiIChSRkMgMzIyMCAiSVAgTW9iaWxpdHkNCiAgICBTdXBwb3J0IGZvciBJUHY0IiBzZWN0aW9uIDQuNikgd2hlbiBpbnRlcmZhY2UgaXMgInVwIiB3aXRoIG5ldGlmX3NldF91cCgpLg0KDQogIDIwMDctMDMtMjYgRnLpZOlyaWMgQmVybm9uLCBKb25hdGhhbiBMYXJtb3VyDQogICogb3B0LmgsIHRjcGlwLmM6IE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBMV0lQX0FSUCBhbGxvdyB0byBkaXNhYmxlIEFSUCBpbml0IGF0IGJ1aWxkDQogICAgdGltZSBpZiB5b3Ugb25seSB1c2UgUFBQIG9yIFNMSVAuIFRoZSBkZWZhdWx0IGlzIGVuYWJsZS4gTm90ZSB3ZSBkb24ndCBoYXZlIHRvIGNhbGwgDQogICAgZXRoYXJwX2luaXQgaW4geW91ciBwb3J0J3MgaW5pdGlsaXphdGlvbiBzZXF1ZW5jZSBpZiB5b3UgdXNlIHRjcGlwLmMsIGJlY2F1c2UgdGhpcyBjYWxsDQogICAgaXMgZG9uZSBpbiB0Y3BpcF9pbml0IGZ1bmN0aW9uLg0KDQogIDIwMDctMDMtMjIgRnLpZOlyaWMgQmVybm9uDQogICogc3RhdHMuaCwgc3RhdHMuYywgbXNnX2luLmM6IFN0YXRzIGNvdW50ZXJzIGNhbiBiZSBjaGFuZ2UgdG8gdTMyX3QgaWYgbmVjZXNzYXJ5IHdpdGggdGhlDQogICAgbmV3IG9wdGlvbiBMV0lQX1NUQVRTX0xBUkdFLiBJZiB5b3UgbmVlZCB0aGlzIG9wdGlvbiwgZGVmaW5lIExXSVBfU1RBVFNfTEFSR0UgdG8gMSBpbg0KICAgIHlvdXIgbHdpcG9wdHMuaC4gTW9yZSwgdW51c2VkIGNvdW50ZXJzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc3RhdHMgc3RydWN0cywgYW5kIG5vdCANCiAgICBkaXNwbGF5IGJ5IHN0YXRzX2Rpc3BsYXkoKS4gTm90ZSB0aGF0IHNvbWUgb3B0aW9ucyAoU1lTX1NUQVRTIGFuZCBSQVdfU1RBVFMpIGFyZSBkZWZpbmVkDQogICAgYnV0IG5ldmVyIHVzZWQuIEZpeCBtc2dfaW4uYyB3aXRoIHRoZSBjb3JyZWN0ICNpZiB0ZXN0IGZvciBhIHN0YXQgZGlzcGxheS4NCg0KICAyMDA3LTAzLTIxIEtpZXJhbiBNYW5zbGV5DQogICogbmV0aWYuYywgbmV0aWYuaDogQXBwbHkgcGF0Y2gjNDE5NyB3aXRoIHNvbWUgY2hhbmdlcyAob3JpZ2luYXRvcjogcmlyZWxhbmRAaG1nc2wuY29tKS4gDQogICAgUHJvdmlkZXMgY2FsbGJhY2sgb24gbmV0aWYgdXAvZG93biBzdGF0ZSBjaGFuZ2UuDQoNCiAgMjAwNy0wMy0xMSBGculk6XJpYyBCZXJub24sIE1hY2UgR2FlbCwgU3RldmUgUmV5bm9sZHMNCiAgKiBzb2NrZXRzLmgsIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmMsIGlnbXAuaCwgaWdtcC5jLA0KICAgIGlwLmMsIG5ldGlmLmgsIHRjcGlwLmMsIG9wdC5oOg0KICAgIE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBMV0lQX0lHTVAgdG8gZW5hYmxlIElHTVAgcHJvY2Vzc2luZy4gQmFzZWQgb24gb25seSBvbmUgDQogICAgZmlsdGVyIHBlciBhbGwgbmV0d29yayBpbnRlcmZhY2VzLiBEZWNsYXJlIGEgbmV3IGZ1bmN0aW9uIGluIG5ldGlmIHRvIGVuYWJsZSB0bw0KICAgIGNvbnRyb2wgdGhlIE1BQyBmaWx0ZXIgKHRvIHJlZHVjZSBsd0lQIHRyYWZmaWMgcHJvY2Vzc2luZykuDQoNCiAgMjAwNy0wMy0xMSBGculk6XJpYyBCZXJub24NCiAgKiB0Y3AuaCwgdGNwLmMsIHNvY2tldHMuYywgdGNwX291dC5jLCB0Y3BfaW4uYywgb3B0Lmg6IEtlZXBhbGl2ZSB2YWx1ZXMgY2FuDQogICAgYmUgY29uZmlndXJlZCBhdCBydW4gdGltZSB3aXRoIExXSVBfVENQX0tFRVBBTElWRSwgYnV0IGRvbid0IGNoYW5nZSB0aGlzDQogICAgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nIChkZWZhdWx0IGFyZSBSRkMxMTIyIGNvbXBsaWFudCkuIE5vdGUNCiAgICB0aGF0IFRDUF9LRUVQSURMRSBhbmQgVENQX0tFRVBJTlRWTCBoYXZlIHRvIGJlIHNldCBpbiBzZWNvbmRzLg0KDQogIDIwMDctMDMtMDggRnLpZOlyaWMgQmVybm9uDQogICogdGNwLmg6IEtlZXBhbGl2ZSB2YWx1ZXMgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLCBidXQgZG9uJ3QgY2hhbmdlDQogICAgdGhpcyB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcgKGRlZmF1bHQgYXJlIFJGQzExMjIgY29tcGxpYW50KS4NCg0KICAyMDA3LTAzLTA4IEZy6WTpcmljIEJlcm5vbg0KICAqIHNvY2tldHMuYywgYXBpLmgsIGFwaV9saWIuYywgdGNwaXAuYywgc3lzLmgsIHN5cy5jLCBlcnIuYywgb3B0Lmg6DQogICAgSW1wbGVtZW50IExXSVBfU09fUkNWVElNRU8gY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgU09fUkNWVElNRU8NCiAgICBvbiBVRFAgc29ja2V0cy9uZXRjb25uLg0KDQogIDIwMDctMDMtMDggU2ltb24gR29sZHNjaG1pZHQNCiAgKiBzbm1wX21zZy5oLCBtc2dfaW4uYzogU05NUCBVRFAgcG9ydHMgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLg0KDQogIDIwMDctMDMtMDYgRnLpZOlyaWMgQmVybm9uDQogICogYXBpLmgsIGFwaV9saWIuYywgc29ja2V0cy5oLCBzb2NrZXRzLmMsIHRjcGlwLmMsIHN5cy5oLCBzeXMuYywgZXJyLmg6IA0KICAgIEltcGxlbWVudCBTT19SQ1ZUSU1FTyBvbiBVRFAgc29ja2V0cy9uZXRjb25uLg0KDQogIDIwMDctMDItMjggS2llcmFuIE1hbnNsZXkgKGJhc2VkIG9uIHBhdGNoIGZyb20gU2ltb24gR29sZHNjaG1pZHQpDQogICogYXBpX2xpYi5jLCB0Y3BpcC5jLCBtZW1wLmMsIG1lbXAuaDogbWFrZSBBUEkgbXNnIHN0cnVjdHMgYWxsb2NhdGVkDQogICAgb24gdGhlIHN0YWNrIGFuZCByZW1vdmUgdGhlIEFQSSBtc2cgdHlwZSBmcm9tIG1lbXANCg0KICAyMDA3LTAyLTI2IEpvbmF0aGFuIExhcm1vdXIgKGJhc2VkIG9uIHBhdGNoIGZyb20gU2ltb24gR29sZHNjaG1pZHQpDQogICogc29ja2V0cy5oLCBzb2NrZXRzLmM6IE1vdmUgc29ja2V0IGluaXRpYWxpemF0aW9uIHRvIG5ldw0KICAgIGx3aXBfc29ja2V0X2luaXQoKSBmdW5jdGlvbi4NCiAgICBOT1RFOiB0aGlzIGNoYW5nZXMgdGhlIEFQSSB3aXRoIHBvcnRzLiBQb3J0cyB3aWxsIGhhdmUgdG8gYmUNCiAgICB1cGRhdGVkIHRvIGNhbGwgbHdpcF9zb2NrZXRfaW5pdCgpIG5vdy4NCg0KICAyMDA3LTAyLTI2IEpvbmF0aGFuIExhcm1vdXIgKGJhc2VkIG9uIHBhdGNoIGZyb20gU2ltb24gR29sZHNjaG1pZHQpDQogICogYXBpX2xpYi5jOiBVc2UgbWVtY3B5IGluIG5ldGJ1Zl9jb3B5X3BhcnRpYWwuDQoNCg0KICArKyBCdWcgZml4ZXM6DQoNCiAgMjAwOC0wMy0xNyBGculk6XJpYyBCZXJub24sIEVkIEtlcmVrZXMNCiAgKiBpZ21wLmgsIGlnbXAuYzogRml4IGJ1ZyAjMjI2MTMgIklHTVAgaXBoZHIgcHJvYmxlbSIgKGNvdWxkIGhhdmUNCiAgICBzb21lIHByb2JsZW1zIHRvIGZpbGwgdGhlIElQIGhlYWRlciBvbiBzb21lIHRhcmdldHMsIHVzZSBub3cgdGhlDQogICAgaXAuaCBtYWNyb3MgdG8gZG8gaXQpLg0KDQogIDIwMDgtMDMtMTMgRnLpZOlyaWMgQmVybm9uDQogICogc29ja2V0cy5jOiBGaXggYnVnICMyMjQzNSAibHdpcF9yZWN2ZnJvbSB3aXRoIFRDUCBicmVhazsiLiBVc2luZw0KICAgIChsd2lwXylyZWN2ZnJvbSB3aXRoIHZhbGlkICJmcm9tIiBhbmQgImZyb21sZW4iIHBhcmFtZXRlcnMsIG9uIGENCiAgICBUQ1AgY29ubmVjdGlvbiBjYXVzZWQgYSBjcmFzaC4gTm90ZSB0aGF0IHVzaW5nIChsd2lwXylyZWN2ZnJvbQ0KICAgIGxpa2UgdGhpcyBpcyBhIGJpdCBzbG93IGFuZCB0aGF0IHVzaW5nIChsd2lwKWdldHBlZXJuYW1lIGlzIHRoZQ0KICAgIGdvb2QgbHdpcCB3YXkgdG8gZG8gaXQgKHNvLCB1c2luZyByZWN2IGlzIGZhc3RlciBvbiB0Y3Agc29ja2V0cykuDQoNCiAgMjAwOC0wMy0xMiBGculk6XJpYyBCZXJub24sIEpvbmF0aGFuIExhcm1vdXINCiAgKiBhcGlfbXNnLmMsIGNvbnRyaWIvYXBwcy9waW5nLmM6IEZpeCBidWcgIzIyNTMwICJhcGlfbXNnLmMncw0KICAgIHJlY3ZfcmF3KCkgZG9lcyBub3QgY29uc3VtZSBkYXRhIiwgYW5kIHRoZSBwaW5nIHNhbXBsZSAod2l0aA0KICAgIExXSVBfU09DS0VUPTEsIHRoZSBjb2RlIGRpZCB0aGUgd3Jvbmcgc3VwcG9zaXRpb24gdGhhdCBsd2lwX3JlY3Zmcm9tDQogICAgcmV0dXJuZWQgdGhlIElQIHBheWxvYWQsIHdpdGhvdXQgdGhlIElQIGhlYWRlcikuDQoNCiAgMjAwOC0wMy0wNCBKb25hdGhhbiBMYXJtb3VyDQogICogbWVtLmMsIHN0YXRzLmMsIG1lbS5oOiBhcHBseSBwYXRjaCAjNjQxNCB0byBhdm9pZCBjb21waWxlciBlcnJvcnMNCiAgYW5kL29yIHdhcm5pbmdzIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBtZW1fc2l6ZV90IGFuZCBzaXplX3QgZGlmZmVyLg0KICAqIHBidWYuYywgcHBwLmM6IEZpeCB3YXJuaW5ncyBvbiBzb21lIHN5c3RlbXMgd2l0aCBtZW1fbWFsbG9jLg0KDQogIDIwMDgtMDMtMDQgS2llcmFuIE1hbnNsZXkgKGNvbnRyaWJ1dGlvbnMgYnkgb3RoZXJzKSANCiAgKiBOdW1lcm91cyBzbWFsbCBjb21waWxlciBlcnJvci93YXJuaW5nIGZpeGVzIGZyb20gY29udHJpYnV0aW9ucyB0bw0KICAgIG1haWxpbmcgbGlzdCBhZnRlciAxLjMuMCByZWxlYXNlIGNhbmRpZGF0ZSBtYWRlLg0KDQogIDIwMDgtMDEtMjUgQ3VpIGhlbmdiaW4gKGludGVncmF0ZWQgYnkgRnLpZOlyaWMgQmVybm9uKQ0KICAqIGRucy5jOiBGaXggYnVnICMyMjEwOCAiRE5TIHByb2JsZW0iIGNhdXNlZCBieSB1bmFsaWduZWQgc3RydWN0dXJlcy4NCg0KICAyMDA4LTAxLTE1IEtpZXJhbiBNYW5zbGV5DQogICogdGNwX291dC5jOiBCVUcyMDUxMS4gIE1vZGlmeSBwZXJzaXN0IHRpbWVyIHRvIHN0YXJ0IHdoZW4gd2UgYXJlDQogICAgcHJldmVudGVkIGZyb20gc2VuZGluZyBieSBhIHNtYWxsIHNlbmQgd2luZG93LCBub3QganVzdCBhIHplcm8NCiAgICBzZW5kIHdpbmRvdy4NCg0KICAyMDA4LTAxLTA5IEpvbmF0aGFuIExhcm1vdXINCiAgKiBvcHQuaCwgaXAuYzogUmVuYW1lIElQX09QVElPTlMgZGVmaW5lIHRvIElQX09QVElPTlNfQUxMT1dFRCB0byBhdm9pZA0KICAgIGNvbmZsaWN0IHdpdGggTGludXggc3lzdGVtIGhlYWRlcnMuDQoNCiAgMjAwOC0wMS0wNiBKb25hdGhhbiBMYXJtb3VyDQogICogZGhjcC5jOiBmaXggYnVnICMxOTkyNzogIkRIQ1AgTkFDSyBwcm9ibGVtIiBieSBjbGVhcmluZyBhbnkgZXhpc3Rpbmcgc2V0IElQDQogICAgYWRkcmVzcyBlbnRpcmVseSBvbiByZWNlaXZpbmcgYSBESENQTkFLLCBhbmQgcmVzdGFydGluZyBkaXNjb3ZlcnkuDQoNCiAgMjAwNy0xMi0yMSBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHN5cy5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYywgc29ja2V0cy5jOiBmaXggYnVnICMyMTY5ODogIm5ldGNvbm4tPnJlY3ZfYXZhaWwNCiAgICBpcyBub3QgcHJvdGVjdGVkIiBieSB1c2luZyBuZXcgbWFjcm9zIGZvciBpbnRlcmxvY2tlZCBhY2Nlc3MgdG8gbW9kaWZ5L3Rlc3QNCiAgICBuZXRjb25uLT5yZWN2X2F2YWlsLg0KDQogIDIwMDctMTItMjAgS2llcmFuIE1hbnNsZXkgKGJhc2VkIG9uIHBhdGNoIGZyb20gT2xlZyBUeXNoZXYpDQogICogdGNwX2luLmM6IGZpeCBidWcjIDIxNTM1IChucnR4IG5vdCByZXNldCBjb3JyZWN0bHkgaW4gU1lOX1NFTlQgc3RhdGUpDQoNCiAgMjAwNy0xMi0yMCBLaWVyYW4gTWFuc2xleSAoYmFzZWQgb24gcGF0Y2ggZnJvbSBQZXItSGVucmlrIEx1bmRib2xtKQ0KICAqIHRjcC5jLCB0Y3BfaW4uYywgdGNwX291dC5jLCB0Y3AuaDogZml4IGJ1ZyAjMjAxOTkgKGJldHRlciBoYW5kbGluZw0KICAgIG9mIHNpbGx5IHdpbmRvdyBhdm9pZGFuY2UgYW5kIHByZXZlbnQgbHdJUCBmcm9tIHNocmlua2luZyB0aGUgd2luZG93KQ0KDQogIDIwMDctMTItMDQgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB0Y3AuYywgdGNwX2luLmM6IGZpeCBidWcgIzIxNjk5IChzZWdtZW50IGxlYWsgaW4gb29zZXEgcHJvY2Vzc2luZyB3aGVuIGxhc3QNCiAgICBkYXRhIHBhY2tldCB3YXMgbG9zdCk6IGFkZCBhc3NlcnQgdGhhdCBhbGwgc2VnbWVudCBsaXN0cyBhcmUgZW1wdHkgaW4NCiAgICB0Y3BfcGNiX3JlbW92ZSBiZWZvcmUgc2V0dGluZyBwY2IgdG8gQ0xPU0VEIHN0YXRlOyBkb24ndCBkaXJlY3RseSBzZXQgQ0xPU0VEDQogICAgc3RhdGUgZnJvbSBMQVNUX0FDSyBpbiB0Y3BfcHJvY2Vzcw0KDQogIDIwMDctMTItMDIgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBzb2NrZXRzLmg6IGZpeCBidWcgIzIxNjU0OiBleGNsdWRlIGRlZmluaXRpb24gb2Ygc3RydWN0IHRpbWV2YWwgZnJvbSAjaWZuZGVmIEZEX1NFVA0KICAgIElmIGluY2x1ZGluZyA8c3lzL3RpbWUuaD4gZm9yIHN5c3RlbS1zdHJ1Y3QgdGltZXZhbCwgTFdJUF9USU1FVkFMX1BSSVZBVEUgbm93DQogICAgaGFzIHRvIGJlIHNldCB0byAwIGluIGx3aXBvcHRzLmgNCg0KICAyMDA3LTEyLTAyIFNpbW9uIEdvbGRzY2htaWR0DQogICogYXBpX21zZy5jLCBhcGlfbGliLmM6IGZpeCBidWcgIzIxNjU2IChyZWN2bWJveCBwcm9ibGVtIGluIG5ldGNvbm4gQVBJKTogYWx3YXlzDQogICAgYWxsb2NhdGUgYSByZWN2bWJveCBpbiBuZXRjb25uX25ld193aXRoX3Byb3RvX2FuZF9jYWxsYmFjay4gRm9yIGEgdGNwLWxpc3Rlbg0KICAgIG5ldGNvbm4sIHRoaXMgcmVjdm1ib3ggaXMgbGF0ZXIgZnJlZWQgYW5kIGEgbmV3IG1ib3ggaXMgYWxsb2NhdGVkIGZvciBhY2NlcHRtYm94Lg0KICAgIFRoaXMgaXMgYSBmaXggZm9yIHRocmVhZC1zYWZldHkgYW5kIGFsbG9jYXRlcyBhbGwgaXRlbXMgbmVlZGVkIGZvciBhIG5ldGNvbm4NCiAgICB3aGVuIHRoZSBuZXRjb25uIGlzIGNyZWF0ZWQuDQoNCiAgMjAwNy0xMS0zMCBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHVkcC5jOiBmaXJzdCBhdHRlbXB0IHRvIGZpeCBidWcgIzIxNjU1IChESENQIGRvZXNuJ3Qgd29yayByZWxpYWJseSB3aXRoIG11bHRpcGxlDQogICAgbmV0aWZzKTogaWYgTFdJUF9ESENQIGlzIGVuYWJsZWQsIFVEUCBwYWNrZXRzIHRvIERIQ1BfQ0xJRU5UX1BPUlQgYXJlIHBhc3NlZA0KICAgIHRvIG5ldGlmLT5kaGNwLT5wY2Igb25seSAoaWYgdGhhdCBleGlzdHMpIGFuZCBub3QgdG8gYW55IG90aGVyIHBjYiBmb3IgdGhlIHNhbWUNCiAgICBwb3J0IChvbmx5IHNvbHV0aW9uIHRvIGxldCBVRFAgcGNicyAnYmluZCcgdG8gYSBuZXRpZiBpbnN0ZWFkIG9mIGFuIElQIGFkZHJlc3MpDQoNCiAgMjAwNy0xMS0yNyBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGlwLmM6IGZpeGVkIGJ1ZyAjMjE2NDMgKHVkcF9zZW5kL3Jhd19zZW5kIGRvbid0IGZhaWwgaWYgbmV0aWYgaXMgZG93bikgYnkNCiAgICBsZXR0aW5nIGlwX3JvdXRlIG9ubHkgdXNlIG5ldGlmcyB0aGF0IGFyZSB1cC4NCg0KICAyMDA3LTExLTI3IFNpbW9uIEdvbGRzY2htaWR0DQogICogZXJyLmgsIGFwaV9saWIuYywgYXBpX21zZy5jLCBzb2NrZXRzLmM6IENoYW5nZWQgZXJyb3IgaGFuZGxpbmc6IEVSUl9NRU0sIEVSUl9CVUYNCiAgICBhbmQgRVJSX1JURSBhcmUgc2VlbiBhcyBub24tZmF0YWwsIGFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLiBuZXRjb25ucyBhbmQNCiAgICBzb2NrZXRzIGJsb2NrIG1vc3Qgb3BlcmF0aW9ucyBvbmNlIHRoZXkgaGF2ZSBzZWVuIGEgZmF0YWwgZXJyb3IuDQoNCiAgMjAwNy0xMS0yNyBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHVkcC5oLCB1ZHAuYywgZGhjcC5jOiBJbXBsZW1lbnRlZCBuZXcgZnVuY3Rpb24gdWRwX3NlbmR0b19pZiB3aGljaCB0YWtlcyB0aGUNCiAgICBuZXRpZiB0byBzZW5kIGFzIGFuIGFyZ3VtZW50ICh0byBiZSBhYmxlIHRvIHNlbmQgb24gbmV0aWZzIHRoYXQgYXJlIGRvd24pLg0KDQogIDIwMDctMTEtMjYgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMyMTU4MjogcGNiLT5hY2tlZCBhY2NvdW50aW5nIGNhbiBiZSB3cm9uZyB3aGVuIEFDS3MNCiAgICBhcnJpdmUgb3V0LW9mLW9yZGVyDQoNCiAgMjAwNy0xMS0yMSBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHRjcC5oLCB0Y3Bfb3V0LmMsIGFwaV9tc2cuYzogRml4ZWQgYnVnICMyMDI4NzogdGNwX291dHB1dF9uYWdsZSBzZW5kcyB0b28gZWFybHkNCiAgICBGaXhlZCB0aGUgbmFnbGUgYWxnb3JpdGhtOyBuYWdsZSBub3cgYWxzbyB3b3JrcyBmb3IgYWxsIHJhdyBBUEkgYXBwbGljYXRpb25zDQogICAgYW5kIGhhcyB0byBiZSBleHBsaWNpdGx5IGRpc2FibGVkIHdpdGggJ3RjcF9wY2ItPmZsYWdzIHw9IFRGX05PREVMQVknDQoNCiAgMjAwNy0xMS0xMiBGculk6XJpYyBCZXJub24NCiAgKiBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuaCwgYXBpX21zZy5jOiBGaXhlZCBidWcgIzIwOTAwLiBOb3csIG1vc3QNCiAgICBvZiB0aGUgbmV0Y29ubl9wZWVyIGFuZCBuZXRjb25uX2FkZHIgcHJvY2Vzc2luZyBpcyBkb25lIGluc2lkZSB0Y3BpcF90aHJlYWQNCiAgICBjb250ZXh0IGluIGRvX2dldGFkZHIuDQoNCiAgMjAwNy0xMS0xMCBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGV0aGFycC5jOiBGaXhlZCBidWc6IGFzc2VydCBmaXJlZCB3aGVuIE1FTVBfQVJQX1FVRVVFIHdhcyBlbXB0eSAod2hpY2ggY2FuDQogICAgaGFwcGVuIGFueSB0aW1lKS4gTm93IHRoZSBwYWNrZXQgc2ltcGx5IGlzbid0IGVucXVldWVkIHdoZW4gb3V0IG9mIG1lbW9yeS4NCg0KICAyMDA3LTExLTAxIFNpbW9uIEdvbGRzY2htaWR0DQogICogdGNwLmMsIHRjcF9pbi5jOiBGaXhlZCBidWcgIzIxNDk0OiBUaGUgc2VuZCBtc3MgKHBjYi0+bXNzKSBpcyBzZXQgdG8gNTM2IChvcg0KICAgIFRDUF9NU1MgaWYgdGhhdCBpcyBzbWFsbGVyKSBhcyBsb25nIGFzIG5vIE1TUyBvcHRpb24gaXMgcmVjZWl2ZWQgZnJvbSB0aGUNCiAgICByZW1vdGUgaG9zdC4NCg0KICAyMDA3LTExLTAxIFNpbW9uIEdvbGRzY2htaWR0DQogICogdGNwLmgsIHRjcC5jLCB0Y3BfaW4uYzogRml4ZWQgYnVnICMyMTQ5MTogVGhlIE1TUyBvcHRpb24gc2VudCAod2l0aCBTWU4pDQogICAgaXMgbm93IGJhc2VkIG9uIFRDUF9NU1MgaW5zdGVhZCBvZiBwY2ItPm1zcyAob24gcGFzc2l2ZSBvcGVuIG5vdyBlZmZlY3RpdmVseQ0KICAgIHNlbmRpbmcgb3VyIGNvbmZpZ3VyZWQgVENQX01TUyBpbnN0ZWFkIG9mIHRoZSBvbmUgcmVjZWl2ZWQpLg0KDQogIDIwMDctMTEtMDEgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB0Y3BfaW4uYzogRml4ZWQgYnVnICMyMTE4MTogT24gYWN0aXZlIG9wZW4sIHRoZSBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IHdhcw0KICAgIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgVENQX01TUywgbm90IG9uIHRoZSBNU1Mgb3B0aW9uIHJlY2VpdmVkDQogICAgd2l0aCBTWU4rQUNLLg0KDQogIDIwMDctMTAtMDkgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB1ZHAuYywgaW5ldC5jLCBpbmV0Lmg6IEZpeGVkIFVEUExpdGU6IHNlbmQ6IENoZWNrc3VtIHdhcyBhbHdheXMgZ2VuZXJhdGVkIHRvbw0KICAgIHNob3J0IGFuZCBhbHNvIHdhcyBnZW5lcmF0ZWQgd3JvbmcgaWYgY2hlY2tzdW0gY292ZXJhZ2UgIT0gdG90X2xlbjsNCiAgICByZWNlaXZlOiBjaGVja3N1bSB3YXMgY2FsY3VsYXRlZCB3cm9uZyBpZiBjaGVja3N1bSBjb3ZlcmFnZSAhPSB0b3RfbGVuDQoNCiAgMjAwNy0xMC0wOCBTaW1vbiBHb2xkc2NobWlkdA0KICAqIG1lbS5jOiBsZnJlZSB3YXMgbm90IHVwZGF0ZWQgaW4gbWVtX3JlYWxsb2MhDQoNCiAgMjAwNy0xMC0wNyBGculk6XJpYyBCZXJub24NCiAgKiBzb2NrZXRzLmMsIGFwaS5oLCBhcGlfbGliLmM6IEZpcnN0IHN0ZXAgdG8gZml4ICJidWcgIzIwOTAwIDogUG90ZW50aWFsDQogICAgY3Jhc2ggZXJyb3IgcHJvYmxlbSB3aXRoIG5ldGNvbm5fcGVlciAmIG5ldGNvbm5fYWRkciIuIFZFUlkgSU1QT1JUQU5UOg0KICAgIHRoaXMgY2hhbmdlIGNhdXNlIGFuIEFQSSBicmVha2FnZSBmb3IgbmV0Y29ubl9hZGRyLCBzaW5jZSBhIHBhcmFtZXRlcg0KICAgIHR5cGUgY2hhbmdlLiBBbnkgY29tcGlsZXIgc2hvdWxkIGNhdXNlIGFuIGVycm9yIHdpdGhvdXQgYW55IGNoYW5nZXMgaW4NCiAgICB5b3VycyBuZXRjb25uX3BlZXIgY2FsbHMgKHNvLCBpdCBjYW4ndCBiZSBhICJzaWxlbnQgY2hhbmdlIikuIEl0IGFsc28NCiAgICByZWR1Y2UgYSBsaXR0bGUgYml0IHRoZSBmb290cHJpbnQgZm9yIHNvY2tldCBsYXllciAobHdpcF9nZXRwZWVybmFtZSAmDQogICAgbHdpcF9nZXRzb2NrbmFtZSB1c2Ugbm93IGEgY29tbW9uIGx3aXBfZ2V0YWRkcm5hbWUgZnVuY3Rpb24gc2luY2UgDQogICAgbmV0Y29ubl9wZWVyICYgbmV0Y29ubl9hZGRyIGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVycykuDQoNCiAgMjAwNy0wOS0yMCBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHRjcC5jOiBGaXhlZCBidWcgIzIxMDgwICh0Y3BfYmluZCB3aXRob3V0IGNoZWNrIHBjYnMgaW4gVElNRV9XQUlUIHN0YXRlKQ0KICAgIGJ5IGNoZWNraW5nICB0Y3BfdHdfcGNicyBhbHNvDQoNCiAgMjAwNy0wOS0xOSBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGljbXAuYzogRml4ZWQgYnVnICMyMTEwNyAoZGlkbid0IHJlc2V0IElQIFRUTCBpbiBJQ01QIGVjaG8gcmVwbGllcykNCg0KICAyMDA3LTA5LTE1IE1pa2UgS2xlc2hvdg0KICAqIG1lbS5jOiBGaXhlZCBidWcgIzIxMDc3IChpbmFjY3VyYWN5IGluIGNhbGN1bGF0aW9uIG9mIGx3aXBfc3RhdC5tZW0udXNlZCkNCg0KICAyMDA3LTA5LTA2IEZy6WTpcmljIEJlcm5vbg0KICAqIHNldmVyYWwtZmlsZXM6IHJlcGxhY2Ugc29tZSAjaW5jbHVkZSAiYXJjaC9jYy5oIiBieSAibHdpcC9hcmNoLmgiLCBvciBzaW1wbHkgcmVtb3ZlDQogICAgaXQgYXMgbG9uZyBhcyAibHdpcC9vcHQuaCIgaXMgaW5jbHVkZWQgYmVmb3JlICh0aGlzIG9uZSBpbmNsdWRlICJsd2lwL2RlYnVnLmgiIHdoaWNoDQogICAgYWxyZWFkeSBpbmNsdWRlICJsd2lwL2FyY2guaCIpLiBMaWtlIHRoYXQsIGRlZmF1bHQgZGVmaW5lcyBhcmUgcHJvdmlkZWQgYnkgImx3aXAvYXJjaC5oIg0KICAgIGlmIHRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIGNjLmgsIGluIHRoZSBzYW1lIHNwaXJpdCB0aGFuICJsd2lwL29wdC5oIiBmb3IgbHdpcG9wdHMuaC4NCg0KICAyMDA3LTA4LTMwIEZy6WTpcmljIEJlcm5vbg0KICAqIGlnbXAuaCwgaWdtcC5jOiBTb21lIGNoYW5nZXMgdG8gcmVtb3ZlIHNvbWUgcmVkdW5kYW50IGNvZGUsIGFkZCBzb21lIHRyYWNlcywgDQogICAgYW5kIGZpeCBzb21lIGNvZGluZyBzdHlsZS4NCg0KICAyMDA3LTA4LTI4IEZy6WTpcmljIEJlcm5vbg0KICAqIHRjcGlwLmM6IEZpeCBUQ1BJUF9NU0dfSU5QS1QgcHJvY2Vzc2luZzogbm93LCB0Y3BpcF9pbnB1dCBjYW4gYmUgdXNlZCBmb3IgYW55DQogICAga2luZCBvZiBwYWNrZXRzLiBUaGVzZSBwYWNrZXRzIGFyZSBjb25zaWRlcmVkIGxpa2UgRXRoZXJuZXQgcGFja2V0cyAocGF5bG9hZCANCiAgICBwb2ludGluZyB0byBldGhoZHIpIGlmIHRoZSBuZXRpZiBnb3QgdGhlIE5FVElGX0ZMQUdfRVRIQVJQIGZsYWcuIEVsc2UsIHBhY2tldHMgDQogICAgYXJlIGNvbnNpZGVyZWQgbGlrZSBJUCBwYWNrZXRzIChwYXlsb2FkIHBvaW50aW5nIHRvIGlwaGRyKS4NCg0KICAyMDA3LTA4LTI3IEZy6WTpcmljIEJlcm5vbg0KICAqIGFwaS5oLCBhcGlfbGliLmMsIGFwaV9tc2cuYzogRmlyc3QgZml4IGZvciAiYnVnICMyMDkwMCA6IFBvdGVudGlhbCBjcmFzaCBlcnJvcg0KICAgIHByb2JsZW0gd2l0aCBuZXRjb25uX3BlZXIgJiBuZXRjb25uX2FkZHIiLiBJbnRyb2R1Y2UgTkVUQ09OTl9MSVNURU4gbmV0Y29ubl9zdGF0ZQ0KICAgIGFuZCByZW1vdmUgb2Jzb2xldGUgb25lcyAoTkVUQ09OTl9SRUNWICYgTkVUQ09OTl9BQ0NFUFQpLg0KDQogIDIwMDctMDgtMjQgS2llcmFuIE1hbnNsZXkNCiAgKiBpbmV0LmMgTW9kaWZ5IChhY2MgPj4gMTYpIHRlc3QgdG8gKChhY2MgPj4gMTYpICE9IDApIHRvIGhlbHAgYnVnZ3kNCiAgICBjb21waWxlciAoUGFyYWRpZ20gQysrKQ0KDQogIDIwMDctMDgtMDkgRnLpZOlyaWMgQmVybm9uLCBCaWxsIEZsb3JhYw0KICAqIHN0YXRzLmgsIHN0YXRzLmMsIGlnbXAuaCwgaWdtcC5jLCBvcHQuaDogRml4IGZvciBidWcgIzIwNTAzIDogSUdNUCBJbXByb3ZlbWVudC4NCiAgICBJbnRyb2R1Y2UgSUdNUF9TVEFUUyB0byBjZW50cmFsaXplIHN0YXRpc3RpY3MgbWFuYWdlbWVudC4NCg0KICAyMDA3LTA4LTA5IEZy6WTpcmljIEJlcm5vbiwgQmlsbCBGbG9yYWMNCiAgKiB1ZHAuYzogRml4IGZvciBidWcgIzIwNTAzIDogSUdNUCBJbXByb3ZlbWVudC4gRW5hYmxlIHRvIHJlY2VpdmUgYSBtdWx0aWNhc3QNCiAgICBwYWNrZXQgb24gYSB1ZHAgcGNiIGJpbmRlZCBvbiBhbiBuZXRpZidzIElQIGFkZHJlc3MsIGFuZCBub3Qgb24gImFueSIuDQoNCiAgMjAwNy0wOC0wOSBGculk6XJpYyBCZXJub24sIEJpbGwgRmxvcmFjDQogICogaWdtcC5oLCBpZ21wLmMsIGlwLmM6IEZpeCBtaW5vciBjaGFuZ2VzIGZyb20gYnVnICMyMDUwMyA6IElHTVAgSW1wcm92ZW1lbnQuDQogICAgVGhpcyBpcyBtYWlubHkgb24gdXNpbmcgbG9va3VwL2xvb2tmb3IsIGFuZCBzb21lIGNvZGluZyBzdHlsZXMuLi4NCg0KICAyMDA3LTA3LTI2IEZy6WTpcmljIEJlcm5vbiAoYW5kICJ0aGVkb2N0b3IiKQ0KICAqIGlnbXAuYzogRml4IGJ1ZyAjMjA1OTUgdG8gYWNjZXB0IElHTVB2MyAiUXVlcnkiIG1lc3NhZ2VzLg0KDQogIDIwMDctMDctMjUgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBhcGlfbXNnLmMsIHRjcC5jOiBBbm90aGVyIGZpeCBmb3IgYnVnICMyMDAyMTogYnkgbm90IHJldHVybmluZyBhbiBlcnJvciBpZg0KICAgIHRjcF9vdXRwdXQgZmFpbHMgaW4gdGNwX2Nsb3NlLCB0aGUgY29kZSBpbiBkb19jbG9zZV9pbnRlcm5hbCBnZXRzIHNpbXBsZXINCiAgICAodGNwX291dHB1dCBpcyBjYWxsZWQgYWdhaW4gbGF0ZXIgZnJvbSB0Y3AgdGltZXJzKS4NCg0KICAyMDA3LTA3LTI1IFNpbW9uIEdvbGRzY2htaWR0DQogICogaXBfZnJhZy5jOiBGaXhlZCBidWcgIzIwNDI5OiB1c2UgdGhlIG5ldyBwYnVmX2NvcHlfcGFydGlhbCBpbnN0ZWFkIG9mIHRoZSBvbGQNCiAgICBjb3B5X2Zyb21fcGJ1Ziwgd2hpY2ggaWxsZWdhbGx5IG1vZGlmaWVkIHRoZSBnaXZlbiBwYnVmLg0KDQogIDIwMDctMDctMjUgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB0Y3Bfb3V0LmM6IHRjcF9lbnF1ZXVlOiBwY2ItPnNuZF9xdWV1ZWxlbiBkaWRuJ3Qgd29yayBmb3IgY2hhaW5lIFBCVUZfUkFNczoNCiAgICBjaGFuZ2VkIHNuZF9xdWV1ZWxlbisrIHRvIHNuZF9xdWV1ZWxlbiArPSBwYnVmX2NsZW4ocCkuDQoNCiAgMjAwNy0wNy0yNCBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGFwaV9tc2cuYywgdGNwLmM6IEZpeCBidWcgIzIwNDgwOiBDaGVjayB0aGUgcGNiIHBhc3NlZCB0byB0Y3BfbGlzdGVuKCkgZm9yIHRoZQ0KICAgIGNvcnJlY3Qgc3RhdGUgKG11c3QgYmUgQ0xPU0VEKS4NCg0KICAyMDA3LTA3LTEzIFRob21hcyBUYXJhbm93c2tpIChjb21taXRlZCBieSBKYXJlZCBHcnViYikNCiAgKiBtZW1wLmM6IEZpeCBidWcgIzIwNDc4OiBtZW1wX21hbGxvYyByZXR1cm5lZCBOVUxMK01FTVBfU0laRSBvbiBmYWlsZWQNCiAgICBhbGxvY2F0aW9uLiBJdCBub3cgcmV0dXJucyBOVUxMLg0KDQogIDIwMDctMDctMTMgRnLpZOlyaWMgQmVybm9uDQogICogYXBpX21zZy5jOiBGaXggYnVnICMyMDMxODogYXBpX21zZyAicmVjdiIgY2FsbGJhY2tzIGRvbid0IGNhbGwgcGJ1Zl9mcmVlIGluDQogICAgYWxsIGVycm9yIGNhc2VzLg0KDQogIDIwMDctMDctMTMgRnLpZOlyaWMgQmVybm9uDQogICogYXBpX21zZy5jOiBGaXggYnVnICMyMDMxNTogcG9zc2libGUgbWVtb3J5IGxlYWsgcHJvYmxlbSBpZiB0Y3BfbGlzdGVuIGZhaWxlZCwNCiAgICBiZWNhdXNlIGN1cnJlbnQgY29kZSBkb2Vzbid0IGZvbGxvdyByYXdhcGkudHh0IGRvY3VtZW50YXRpb24uDQoNCiAgMjAwNy0wNy0xMyBLaWVyYW4gTWFuc2xleQ0KICAqIHNyYy9jb3JlL3RjcF9pbi5jIEFwcGx5IHBhdGNoIzU3NDEgZnJvbSBPbGVnIFR5c2hldiB0byBmaXggYnVnIGluDQogICAgb3V0IG9mIHNlcXVlbmNlIHByb2Nlc3Npbmcgb2YgcmVjZWl2ZWQgcGFja2V0cw0KDQogIDIwMDctMDctMDMgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBuZWFybHktYWxsLWZpbGVzOiBBZGRlZCBhc3NlcnRpb25zIHdoZXJlIFBCVUZfUkFNIHBidWZzIGFyZSB1c2VkIGFuZCBhbg0KICAgIGFzc3VtcHRpb24gaXMgbWFkZSB0aGF0IHRoaXMgcGJ1ZiBpcyBpbiBvbmUgcGllY2UgKGkuZS4gbm90IGNoYWluZWQpLiBUaGVzZQ0KICAgIGFzc3VtcHRpb25zIGNsYXNoIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnZlcnRpbmcgdG8gZnVsbHkgcG9vbC1iYXNlZA0KICAgIHBidWYgaW1wbGVtZW50YXRpb25zLCB3aGVyZSBQQlVGX1JBTSBwYnVmcyBtaWdodCBiZSBjaGFpbmVkLg0KDQogIDIwMDctMDctMDMgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBhcGkuaCwgYXBpX2xpYi5jLCBhcGlfbXNnLmM6IEZpbmFsIGZpeCBmb3IgYnVnICMyMDAyMSBhbmQgc29tZSBvdGhlciBwcm9ibGVtcw0KICAgIHdoZW4gY2xvc2luZyB0Y3AgbmV0Y29ubnM6IHJlbW92ZWQgY29ubi0+c2VtLCBsZXNzIGNvbnRleHQgc3dpdGNoZXMgd2hlbg0KICAgIGNsb3NpbmcsIGJvdGggbmV0Y29ubl9jbG9zZSBhbmQgbmV0Y29ubl9kZWxldGUgc2hvdWxkIHNhZmVseSBjbG9zZSB0Y3ANCiAgICBjb25uZWN0aW9ucy4NCg0KICAyMDA3LTA3LTAyIFNpbW9uIEdvbGRzY2htaWR0DQogICogaXB2NC9pcC5oLCBpcHY2L2lwLmgsIG9wdC5oLCBuZXRpZi5oLCBldGhhcnAuaCwgaXB2NC9pcC5jLCBuZXRpZi5jLCByYXcuYywNCiAgICB0Y3Bfb3V0LmMsIHVkcC5jLCBldGhhcnAuYzogQWRkZWQgb3B0aW9uIExXSVBfTkVUSUZfSFdBRERSSElOVCAoZGVmYXVsdD1vZmYpDQogICAgdG8gY2FjaGUgQVJQIHRhYmxlIGluZGljZXMgd2l0aCBlYWNoIHBjYiBpbnN0ZWFkIG9mIHNpbmdsZS1lbnRyeSBjYWNoZSBmb3INCiAgICB0aGUgY29tcGxldGUgc3RhY2suDQoNCiAgMjAwNy0wNy0wMiBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHRjcC5oLCB0Y3AuYywgdGNwX2luLmMsIHRjcF9vdXQuYzogQWRkZWQgc29tZSBBU1NFUlRTIGFuZCBjYXN0cyB0byBwcmV2ZW50DQogICAgd2FybmluZ3Mgd2hlbiBhc3NpZ25pbmcgdG8gc21hbGxlciB0eXBlcy4NCg0KICAyMDA3LTA2LTI4IFNpbW9uIEdvbGRzY2htaWR0DQogICogdGNwX291dC5jOiBBZGRlZCBjaGVjayB0byBwcmV2ZW50IHRjcF9wY2ItPnNuZF9xdWV1ZWxlbiBmcm9tIG92ZXJmbG93aW5nLg0KDQogIDIwMDctMDYtMjggU2ltb24gR29sZHNjaG1pZHQNCiAgKiB0Y3AuaDogRml4ZWQgYnVnICMyMDI4NzogRml4ZWQgbmFnbGUgYWxnb3JpdGhtIChzZW5kaW5nIHdhcyBkb25lIHRvbyBlYXJseSBpZg0KICAgIGEgc2VnbWVudCBjb250YWluZWQgY2hhaW5lZCBwYnVmcykNCg0KICAyMDA3LTA2LTI4IEZy6WTpcmljIEJlcm5vbg0KICAqIGF1dG9pcC5jOiByZXBsYWNlIG1vc3Qgb2YgcmFuZCgpIGNhbGxzIGJ5IGEgbWFjcm8gTFdJUF9BVVRPSVBfUkFORCB3aGljaCBjb21wdXRlDQogICAgYSAicHNldWRvLXJhbmRvbSIgdmFsdWUgYmFzZWQgb24gbmV0aWYncyBNQUMgYW5kIHNvbWUgYXV0b2lwIGZpZWxkcy4gSXQncyBhbHdheXMNCiAgICBwb3NzaWJsZSB0byBkZWZpbmUgdGhpcyBtYWNybyBpbiB5b3VyIG93biBsd2lwb3B0cy5oIHRvIGFsd2F5cyB1c2UgQyBsaWJyYXJ5J3MNCiAgICByYW5kKCkuIE5vdGUgdGhhdCBhdXRvaXBfY3JlYXRlX3JhbmRfYWRkciBkb2Vzbid0IHVzZSB0aGlzIG1hY3JvLg0KDQogIDIwMDctMDYtMjggRnLpZOlyaWMgQmVybm9uDQogICogbmV0aWZhcGkuaCwgbmV0aWZhcGkuYywgdGNwaXAuaCwgdGNwaXAuYzogVXBkYXRlIGNvZGUgdG8gaGFuZGxlIHRoZSBvcHRpb24NCiAgICBMV0lQX1RDUElQX0NPUkVfTE9DS0lORywgYW5kIGRvIHNvbWUgY2hhbmdlcyB0byBiZSBjb2hlcmVudCB3aXRoIGxhc3QgbW9kaWZpY2F0aW9ucw0KICAgIGluIGFwaV9saWIvYXBpX21zZyAodXNlIHBvaW50ZXJzIGFuZCBub3QgdHlwZSB3aXRoIHRhYmxlLCBldGMuLi4pIA0KDQogIDIwMDctMDYtMjYgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB1ZHAuaDogRml4ZWQgYnVnICMyMDI1OTogc3RydWN0IHVkcF9oZHIgd2FzIGxhY2tpbmcgdGhlIHBhY2tpbiBkZWZpbmVzLg0KDQogIDIwMDctMDYtMjUgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB1ZHAuYzogRml4ZWQgYnVnICMyMDI1MzogaWNtcF9kZXN0X3VucmVhY2ggd2FzIGNhbGxlZCB3aXRoIGEgd3JvbmcgcC0+cGF5bG9hZA0KICAgIGZvciB1ZHAgcGFja2V0cyB3aXRoIG5vIG1hdGNoaW5nIHBjYi4NCg0KICAyMDA3LTA2LTI1IFNpbW9uIEdvbGRzY2htaWR0DQogICogdWRwLmM6IEZpeGVkIGJ1ZyAjMjAyMjA6IFVEUCBQQ0Igc2VhcmNoIGluIHVkcF9pbnB1dCgpOiBhIG5vbi1sb2NhbCBtYXRjaA0KICAgIGNvdWxkIGdldCB1ZHAgaW5wdXQgcGFja2V0cyBpZiB0aGUgcmVtb3RlIHNpZGUgbWF0Y2hlZC4NCg0KICAyMDA3LTA2LTEzIFNpbW9uIEdvbGRzY2htaWR0DQogICogbmV0aWYuYzogRml4ZWQgYnVnICMyMDE4MCAoVENQIHBjYnMgbGlzdGVuaW5nIG9uIElQX0FERFJfQU5ZIGNvdWxkIGdldA0KICAgIGNoYW5nZWQgaW4gbmV0aWZfc2V0X2lwYWRkciBpZiBwcmV2aW91cyBuZXRpZi0+aXBfYWRkci5hZGRyIHdhcyAwLg0KDQogIDIwMDctMDYtMTMgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBhcGlfbXNnLmM6IHBjYl9uZXcgc2V0cyBjb25uLT5lcnIgaWYgcHJvdG9jb2wgaXMgbm90IGltcGxlbWVudGVkDQogICAgLT4gbmV0Y29ubl9uZXdfLi4oKSBkb2VzIG5vdCBhbGxvY2F0ZSBhIG5ldyBjb25uZWN0aW9uIGZvciB1bnN1cHBvcnRlZA0KICAgIHByb3RvY29scy4NCg0KICAyMDA3LTA2LTEzIEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBhcGlfbGliLmM6IGNoYW5nZSByZXR1cm4gZXhwcmVzc2lvbiBpbiBuZXRjb25uX2FkZHIgYW5kIG5ldGNvbm5fcGVlciwgYmVjYXVzZQ0KICAgIGNvbm4tPmVyciB3YXMgcmVzZXQgdG8gRVJSX09LIHdpdGhvdXQgYW55IHJlYXNvbnMgKGFuZCBlcnJvciB3YXMgbG9zdCkuLi4NCg0KICAyMDA3LTA2LTEzIEZy6WTpcmljIEJlcm5vbiwgTWF0dGhpYXMgV2Vpc3Nlcg0KICAqIG9wdC5oLCBtZW0uaCwgbWVtLmMsIG1lbXAuYywgcGJ1Zi5jLCBpcF9mcmFnLmMsIHZqLmM6IEZpeCBidWcgIzIwMTYyLiBSZW5hbWUNCiAgICBNRU1fQUxJR04gaW4gTFdJUF9NRU1fQUxJR04gYW5kIE1FTV9BTElHTl9TSVpFIGluIExXSVBfTUVNX0FMSUdOX1NJWkUgdG8gYXZvaWQNCiAgICBzb21lIG1hY3JvIG5hbWVzIGNvbGxpc2lvbiB3aXRoIHNvbWUgT1MgbWFjcm9zLg0KDQogIDIwMDctMDYtMTEgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB1ZHAuYzogVURQIExpdGU6IGNvcnJlY3RlZCB0aGUgdXNlIG9mIGNoa3N1bV9sZW4gKGJhc2VkIG9uIFJGQzM4Mjg6IGlmIGl0J3MgMCwNCiAgICBjcmVhdGUgY2hlY2tzdW0gb3ZlciB0aGUgY29tcGxldGUgcGFja2V0LiBPbiBSWCwgaWYgaXQncyA8IDggKGFuZCBub3QgMCksDQogICAgZGlzY2FyZCB0aGUgcGFja2V0LiBBbHNvIHJlbW92ZWQgdGhlIGR1cGxpY2F0ZSAndWRwaGRyLT5jaGtzdW0gPSAwJyBmb3IgYm90aA0KICAgIFVEUCAmIFVEUCBMaXRlLg0KDQogIDIwMDctMDYtMTEgU3Jpbml2YXMgR29sbGFrb3RhICYgT2xlZyBUeXNoZXYNCiAgKiB0Y3Bfb3V0LmM6IEZpeCBmb3IgYnVnICMyMDA3NSA6ICJBIHByb2JsZW0gd2l0aCBrZWVwLWFsaXZlIHRpbWVyIGFuZCBUQ1AgZmxhZ3MiDQogICAgd2hlcmUgVENQIGZsYWdzIHdhc24ndCBpbml0aWFsaXplZCBpbiB0Y3Bfa2VlcGFsaXZlLg0KDQogIDIwMDctMDYtMDMgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB1ZHAuYzogdWRwX2lucHV0KCk6IElucHV0IHBidWYgd2FzIG5vdCBmcmVlZCBpZiBwY2IgaGFkIG5vIHJlY3YgZnVuY3Rpb24NCiAgICByZWdpc3RlcmVkLCBwLT5wYXlsb2FkIHdhcyBtb2RpZmllZCB3aXRob3V0IG1vZGlmeWluZyBwLT5sZW4gaWYgc2VuZGluZw0KICAgIGljbXBfZGVzdF91bnJlYWNoKCkgKGhhZCBubyBuZWdhdGl2ZSBlZmZlY3QgYnV0IHdhcyBkZWZpbml0aXZlbHkgd3JvbmcpLg0KDQogIDIwMDctMDYtMDMgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBpY21wLmM6IENvcnJlY3RlZCBidWcgIzE5OTM3OiBGb3IgcmVzcG9uZGluZyB0byBhbiBpY21wIGVjaG8gcmVxdWVzdCwgaWNtcA0KICAgIHJlLXVzZWQgdGhlIGlucHV0IHBidWYgZXZlbiBpZiB0aGF0IGRpZG4ndCBoYXZlIGVub3VnaCBzcGFjZSB0byBpbmNsdWRlIHRoZQ0KICAgIGxpbmsgaGVhZGVycy4gTm93IHRoZSBzcGFjZSBpcyB0ZXN0ZWQgYW5kIGEgbmV3IHBidWYgaXMgYWxsb2NhdGVkIGZvciB0aGUNCiAgICBlY2hvIHJlc3BvbnNlIHBhY2tldCBpZiB0aGUgZWNobyByZXF1ZXN0IHBidWYgaXNuJ3QgYmlnIGVub3VnaC4NCg0KICAyMDA3LTA2LTAxIFNpbW9uIEdvbGRzY2htaWR0DQogICogc29ja2V0cy5jOiBDaGVja2VkIGluIHBhdGNoICM1OTE0OiBNb3ZlZCBzb2Nrb3B0IHByb2Nlc3NpbmcgaW50byB0Y3BpcF90aHJlYWQuDQoNCiAgMjAwNy0wNS0yMyBGculk6XJpYyBCZXJub24NCiAgKiBhcGlfbGliLmMsIHNvY2tldHMuYzogRml4ZWQgYnVnICM1OTU4IGZvciBuZXRjb25uX2xpc3RlbiAoYWNjZXB0bWJveCBvbmx5DQogICAgYWxsb2NhdGVkIGJ5IGRvX2xpc3RlbiBpZiBzdWNjZXNzKSBhbmQgbmV0Y29ubl9hY2NlcHQgZXJyb3JzIGhhbmRsaW5nLiBJbg0KICAgIG1vc3Qgb2YgYXBpX2xpYiBmdW5jdGlvbnMsIHdlIHJlcGxhY2Ugc29tZSBlcnJvcnMgY2hlY2tpbmdzIGxpa2UgImlmIChjb25uPT1OVUxMKSINCiAgICBieSBBU1NFUlQsIGV4Y2VwdCBmb3IgbmV0Y29ubl9kZWxldGUuDQoNCiAgMjAwNy0wNS0yMyBGculk6XJpYyBCZXJub24NCiAgKiBhcGlfbGliLmM6IEZpeGVkIGJ1ZyAjNTk1NyAiU2FmZS10aHJlYWQgcHJvYmxlbSBpbnNpZGUgbmV0Y29ubl9yZWN2IiB0byByZXR1cm4NCiAgICBhbiBlcnJvciBjb2RlIGlmIGl0J3MgaW1wb3NzaWJsZSB0byBmZXRjaCBhIHBidWYgb24gYSBUQ1AgY29ubmVjdGlvbiAoYW5kIG5vdA0KICAgIGRpcmVjdGx5IGNsb3NlIHRoZSByZWN2bWJveCkuDQoNCiAgMjAwNy0wNS0yMiBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHRjcC5jOiBGaXhlZCBidWcgIzE4OTUgKHRjcF9iaW5kIG5vdCBjb3JyZWN0KSBieSBpbnRyb2R1Y2luZyBhIGxpc3Qgb2YNCiAgICBib3VuZCBidXQgdW5jb25uZWN0ZWQgKGFuZCBub24tbGlzdGVuaW5nKSB0Y3BfcGNicy4NCg0KICAyMDA3LTA1LTIyIEZy6WTpcmljIEJlcm5vbg0KICAqIHN5cy5oLCBzeXMuYywgYXBpX2xpYi5jLCB0Y3BpcC5jOiByZW1vdmUgc3lzX21ib3hfZmV0Y2hfdGltZW91dCgpICh3YXMgb25seQ0KICAgIHVzZWQgZm9yIExXSVBfU09fUkNWVElNRU8gb3B0aW9uKSBhbmQgdXNlIHN5c19hcmNoX21ib3hfZmV0Y2goKSBpbnN0ZWFkIG9mDQogICAgc3lzX21ib3hfZmV0Y2goKSBpbiBhcGkgZmlsZXMuIE5vdywgdXNlcnMgU0hPVUxEIE5PVCB1c2UgaW50ZXJuYWwgbHdJUCBmZWF0dXJlcw0KICAgIGxpa2UgInN5c190aW1lb3V0IiBpbiB0aGVpciBhcHBsaWNhdGlvbiB0aHJlYWRzLg0KDQogIDIwMDctMDUtMjIgRnLpZOlyaWMgQmVybm9uDQogICogYXBpLmgsIGFwaV9saWIuYywgYXBpX21zZy5oLCBhcGlfbXNnLmM6IGNoYW5nZSB0aGUgc3RydWN0IGFwaV9tc2dfbXNnIHRvIHNlZQ0KICAgIHdoaWNoIHBhcmFtZXRlcnMgYXJlIHVzZWQgYnkgd2hpY2ggZG9feHh4IGZ1bmN0aW9uLCBhbmQgdG8gYXZvaWQgIm1pc3VzaW5nIg0KICAgIHBhcmFtZXRlcnMgKHBhdGNoICM1OTM4KS4NCg0KICAyMDA3LTA1LTIyIFNpbW9uIEdvbGRzY2htaWR0DQogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHJhdy5jLCBhcGkuaCwgYXBpX21zZy5oLCByYXcuaDogSW5jbHVkZWQgcGF0Y2ggIzU5Mzg6DQogICAgY2hhbmdlZCByYXdfcGNiLnByb3RvY29sIGZyb20gdTE2X3QgdG8gdThfdCBzaW5jZSBmb3IgSVB2NCBhbmQgSVB2NiwgcHJvdG8NCiAgICBpcyBvbmx5IDggYml0cyB3aWRlLiBUaGlzIGFmZmVjdHMgdGhlIGFwaSwgYXMgdGhlcmUsIHRoZSBwcm90b2NvbCB3YXMNCiAgICB1MTZfdCwgdG9vLg0KDQogIDIwMDctMDUtMTggU2ltb24gR29sZHNjaG1pZHQNCiAgKiBtZW1wLmM6IGFkZGl0aW9uIHRvIHBhdGNoICM1OTEzOiBzbWFsbGVyIHBvaW50ZXIgd2FzIHJldHVybmVkIGJ1dA0KICAgIG1lbXBfbWVtb3J5IHdhcyB0aGUgc2FtZSBzaXplIC0+IGRpZCBub3Qgc2F2ZSBtZW1vcnkuDQoNCiAgMjAwNy0wNS0xNiBTaW1vbiBHb2xkc2NobWlkdA0KICAqIGxvb3BpZi5jLCBzbGlwaWYuYzogRml4IGJ1ZyAjMTk3Mjk6IGZyZWUgcGJ1ZiBpZiBuZXRpZi0+aW5wdXQoKSByZXR1cm5zDQogICAgIT0gRVJSX09LLg0KDQogIDIwMDctMDUtMTYgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBhcGlfbXNnLmMsIHVkcC5jOiBJZiBhIHVkcF9wY2IgaGFzIGEgbG9jYWxfaXAgc2V0LCBjaGVjayBpZiBpdCBpcyB0aGUgc2FtZQ0KICAgIGFzIHRoZSBvbmUgb2YgdGhlIG5ldGlmIHVzZWQgZm9yIHNlbmRpbmcgdG8gcHJldmVudCBzZW5kaW5nIGZyb20gb2xkDQogICAgYWRkcmVzc2VzIGFmdGVyIGEgbmV0aWYgYWRkcmVzcyBnZXRzIGNoYW5nZWQgKHBhcnRseSBmaXhlcyBidWcgIzMxNjgpLg0KDQogIDIwMDctMDUtMTYgRnLpZOlyaWMgQmVybm9uDQogICogdGNwaXAuYywgaWdtcC5oLCBpZ21wLmM6IEZpeGVkIGJ1ZyAiIzE5ODAwIDogSUdNUDogaWdtcF90aWNrKCkgd2lsbCBub3Qgd29yaw0KICAgIHdpdGggTk9fU1lTPTEiLiBOb3RlIHRoYXQgaWdtcF9pbml0IGlzIGFsd2F5cyBpbiB0Y3BpcF90aHJlYWQgKGFuZCBub3QgaW4gDQogICAgdGNwaXBfaW5pdCkgYmVjYXVzZSB3ZSBoYXZlIHRvIGJlIHN1cmUgdGhhdCBuZXR3b3JrIGludGVyZmFjZXMgYXJlIGFscmVhZHkNCiAgICBhZGRlZCAobWFjIGZpbHRlciBpcyB1cGRhdGVkIG9ubHkgaW4gaWdtcF9pbml0IGZvciB0aGUgbW9tZW50KS4NCg0KICAyMDA3LTA1LTE2IFNpbW9uIEdvbGRzY2htaWR0DQogICogbWVtLmMsIG1lbXAuYzogUmVtb3ZlZCBzZW1hcGhvcmVzIGZyb20gbWVtcCwgY2hhbmdlZCBzeXNfc2VtX3dhaXQgY2FsbHMNCiAgICBpbnRvIHN5c19hcmNoX3NlbV93YWl0IGNhbGxzIHRvIHByZXZlbnQgdGltZXJzIGZyb20gcnVubmluZyB3aGlsZSB3YWl0aW5nDQogICAgZm9yIHRoZSBoZWFwLiBUaGlzIGZpeGVzIGJ1ZyAjMTkxNjcuDQoNCiAgMjAwNy0wNS0xMyBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHRjcC5oLCBzb2NrZXRzLmgsIHNvY2tldHMuYzogRml4ZWQgYnVnIGZyb20gcGF0Y2ggIzU4NjUgYnkgbW92aW5nIHRoZSBkZWZpbmVzDQogICAgZm9yIHNvY2tldCBvcHRpb25zIChsd2lwX3NldC8tZ2V0c29ja29wdCkgdXNlZCB3aXRoIGxldmVsIElQUFJPVE9fVENQIGZyb20NCiAgICB0Y3AuaCB0byBzb2NrZXRzLmguDQoNCiAgMjAwNy0wNS0wNyBTaW1vbiBHb2xkc2NobWlkdA0KICAqIG1lbS5jOiBBbm90aGVyIGF0dGVtcHQgdG8gZml4IGJ1ZyAjMTc5MjIuDQoNCiAgMjAwNy0wNS0wNCBTaW1vbiBHb2xkc2NobWlkdA0KICAqIHBidWYuYywgcGJ1Zi5oLCBldGhhcnAuYzogRnVydGhlciB1cGRhdGUgdG8gQVJQIHF1ZXVlaW5nOiBDaGFuZ2VkIHBidWZfY29weSgpDQogICAgaW1wbGVtZW50YXRpb24gc28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkIChkb24ndCBhbGxvY2F0ZSB0aGUgdGFyZ2V0DQogICAgcGJ1ZiBpbnNpZGUgcGJ1Zl9jb3B5KCkpLg0KDQogIDIwMDctMDUtMDQgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBtZW1wLmM6IGNoZWNrZWQgaW4gcGF0Y2ggIzU5MTM6IGluIG1lbXBfbWFsbG9jKCkgd2UgY2FuIHJldHVybiBtZW1wIGFzIG1lbQ0KICAgIHRvIHNhdmUgYSBsaXR0bGUgUkFNIChuZXh0IHBvaW50ZXIgb2YgbWVtcCBpcyBub3QgdXNlZCB3aGlsZSBub3QgaW4gcG9vbCkuDQoNCiAgMjAwNy0wNS0wMyAibWFxIg0KICAqIHNvY2tldHMuYzogRml4IGlvY3RsIEZJT05SRUFEIHdoZW4gc29tZSBkYXRhIHJlbWFpbnMgZnJvbSBsYXN0IHJlY3YuDQogICAgKHBhdGNoICMzNTc0KS4NCg0KICAyMDA3LTA0LTIzIFNpbW9uIEdvbGRzY2htaWR0DQogICogbG9vcGlmLmMsIGxvb3BpZi5oLCBvcHQuaCwgc3JjL25ldGlmL0ZJTEVTOiBmaXggYnVnICMyNTk1OiAibG9vcGlmIHJlc3VsdHMNCiAgICBpbiBOVUxMIHJlZmVyZW5jZSBmb3IgaW5jb21pbmcgVENQIHBhY2tldHMiLiBMb29waWYgaGFzIHRvIGJlIGNvbmZpZ3VyZWQNCiAgICAodXNpbmcgTFdJUF9MT09QSUZfTVVMVElUSFJFQURJTkcpIHRvIGRpcmVjdGx5IGNhbGwgbmV0aWYtPmlucHV0KCkNCiAgICAobXVsdGl0aHJlYWRpbmcgZW52aXJvbm1lbnRzLCBlLmcuIG5ldGlmLT5pbnB1dCgpID0gdGNwaXBfaW5wdXQoKSkgb3INCiAgICBwdXR0aW5nIHBhY2tldHMgb24gYSBsaXN0IHRoYXQgaXMgZmVkIHRvIHRoZSBzdGFjayBieSBjYWxsaW5nIGxvb3BpZl9wb2xsKCkNCiAgICAoc2luZ2xlLXRocmVhZCAvIE5PX1NZUyAvIHBvbGxpbmcgZW52aXJvbm1lbnQgd2hlcmUgZS5nLg0KICAgIG5ldGlmLT5pbnB1dCgpID0gaXBfaW5wdXQpLg0KDQogIDIwMDctMDQtMTcgSm9uYXRoYW4gTGFybW91cg0KICAqIHBidWYuYzogVXNlIHMzMl90IGluIHBidWZfcmVhbGxvYygpLCBhcyBhbiBzMTZfdCBjYW4ndCByZWxpYWJseSBob2xkDQogICAgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gdTE2X3Qncy4NCiAgKiBzb2NrZXRzLmg6IEZEX1NFVFNJWkUgbmVlZHMgdG8gbWF0Y2ggbnVtYmVyIG9mIHNvY2tldHMsIHdoaWNoIGlzDQogICAgTUVNUF9OVU1fTkVUQ09OTiBpbiBzb2NrZXRzLmMgcmlnaHQgbm93Lg0KDQogIDIwMDctMDQtMTIgSm9uYXRoYW4gTGFybW91cg0KICAqIGljbXAuYzogUmVzZXQgSVAgaGVhZGVyIFRUTCBpbiBJQ01QIEVDSE8gcmVzcG9uc2VzIChidWcgIzE5NTgwKS4NCg0KICAyMDA3LTA0LTEyIEtpZXJhbiBNYW5zbGV5DQogICogdGNwLmMsIHRjcF9pbi5jLCB0Y3Bfb3V0LmMsIHRjcC5oOiBNb2RpZnkgd2F5IHRoZSByZXRyYW5zbWlzc2lvbg0KICAgIHRpbWVyIGlzIHJlc2V0IHRvIGZpeCBidWcjMTk0MzQsIHdpdGggaGVscCBmcm9tIE9sZWcgVHlzaGV2Lg0KDQogIDIwMDctMDQtMTEgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBldGhhcnAuYywgcGJ1Zi5jLCBwYnVmLmg6IDNyZCBmaXggZm9yIGJ1ZyAjMTE0MDAgKGFycC1xdWV1aW5nKTogTW9yZSBwYnVmcyB0aGFuDQogICAgcHJldmlvdXNseSB0aG91Z2h0IG5lZWQgdG8gYmUgY29waWVkIChldmVyeXRoaW5nIGJ1dCBQQlVGX1JPTSEpLiBDbGVhbmVkIHVwDQogICAgcGJ1Zi5jOiByZW1vdmVkIGZ1bmN0aW9ucyBubyBuZWVkZWQgYW55IG1vcmUgKGJ5IGV0aGFycCkuDQoNCiAgMjAwNy0wNC0xMSBLaWVyYW4gTWFuc2xleQ0KICAqIGluZXQuYywgaXBfYWRkci5oLCBzb2NrZXRzLmgsIHN5cy5oLCB0Y3AuaDogQXBwbHkgcGF0Y2ggIzU3NDU6IEZpeA0KICAgICJDb25zdGFudCBpcyBsb25nIiB3YXJuaW5ncyB3aXRoIDE2Yml0IGNvbXBpbGVycy4gIENvbnRyaWJ1dGVkIGJ5DQogICAgYXZhdGFyQG1tbGFiLmNzZS55enUuZWR1LnR3DQoNCiAgMjAwNy0wNC0wNSBGculk6XJpYyBCZXJub24sIEpvbmF0aGFuIExhcm1vdXINCiAgKiBhcGlfbXNnLmM6IEZpeCBidWcgIzE2ODMwOiAiZXJyX3RjcCgpIHBvc3RzIHRvIGNvbm5lY3Rpb24gbWFpbGJveCB3aGVuIG5vIHBlbmQgb24NCiAgICB0aGUgbWFpbGJveCBpcyBhY3RpdmUiLiBOb3csIHRoZSBwb3N0IGlzIG9ubHkgZG9uZSBkdXJpbmcgYSBjb25uZWN0LCBhbmQgZG9fc2VuZCwNCiAgICBkb193cml0ZSBhbmQgZG9fam9pbl9sZWF2ZV9ncm91cCBkb24ndCBkbyBhbnl0aGluZyBpZiBhIHByZXZpb3VzIGVycm9yIHdhcyBzaWduYWxlZC4NCg0KICAyMDA3LTA0LTAzIEZy6WTpcmljIEJlcm5vbg0KICAqIGlwLmM6IERvbid0IHNldCB0aGUgSVBfREYgKCJEb24ndCBmcmFnbWVudCIpIGZsYWcgaW4gdGhlIElQIGhlYWRlciBpbiBJUCBvdXRwdXQNCiAgICBwYWNrZXRzLiBTZWUgcGF0Y2ggIzU4MzQuDQoNCiAgMjAwNy0wMy0zMCBGculk6XJpYyBCZXJub24NCiAgKiBhcGlfbXNnLmM6IGFkZCBhICJwY2JfbmV3IiBoZWxwZXIgZnVuY3Rpb24gdG8gYXZvaWQgcmVkdW5kYW50IGNvZGUsIGFuZCB0byBhZGQNCiAgICBtaXNzaW5nICBwY2IgYWxsb2NhdGlvbnMgY2hlY2tpbmcgKGluIGRvX2JpbmQsIGFuZCBmb3IgZWFjaCByYXdfbmV3KS4gRml4IHN0eWxlLg0KDQogIDIwMDctMDMtMzAgRnLpZOlyaWMgQmVybm9uDQogICogbW9zdCBvZiBmaWxlczogcHJlZml4IGFsbCBkZWJ1Zy5oIGRlZmluZSB3aXRoICJMV0lQXyIgdG8gYXZvaWQgYW55IGNvbmZsaWN0IHdpdGgNCiAgICBvdGhlcnMgZW52aXJvbm1lbnQgZGVmaW5lcyAodGhlc2Ugd2VyZSB0b28gImdlbmVyaWMiKS4NCg0KICAyMDA3LTAzLTI4IEZy6WTpcmljIEJlcm5vbg0KICAqIGFwaS5oLCBhcGlfbGliLmMsIHNvY2tldHMuYzogbmV0YnVmX3JlZiBkb2Vzbid0IGNoZWNrIGl0cyBpbnRlcm5hbCBwYnVmX2FsbG9jIGNhbGwNCiAgICByZXN1bHQgYW5kIGNhbiBjYXVzZSBhIGNyYXNoLiBsd2lwX3NlbmQgbm93IGNoZWNrIG5ldGJ1Zl9yZWYgcmVzdWx0Lg0KDQogIDIwMDctMDMtMjggU2ltb24gR29sZHNjaG1pZHQNCiAgKiBzb2NrZXRzLmMgUmVtb3ZlICIjaW5jbHVkZSA8ZXJybm8uaD4iIGZyb20gc29ja2V0cy5jIHRvIGF2b2lkIG11bHRpcGxlDQogICAgZGVmaW5pdGlvbiBvZiBtYWNyb3MgKGluIGVycm5vLmggYW5kIGx3aXAvYXJjaC5oKSBpZiBMV0lQX1BST1ZJREVfRVJSTk8gaXMNCiAgICBkZWZpbmVkLiBUaGlzIGlzIHRoZSB3YXkgaXQgc2hvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IChsb29raW5nIGF0DQogICAgZG9jL3N5c19hcmNoLnR4dCkNCg0KICAyMDA3LTAzLTI4IEtpZXJhbiBNYW5zbGV5DQogICogb3B0LmggQ2hhbmdlIGRlZmF1bHQgUEJVRl9QT09MX0JVRlNJWkUgKGFnYWluKSB0byBhY2NvbW9kYXRlIGRlZmF1bHQgTVNTICsNCiAgICBJUCBhbmQgVENQIGhlYWRlcnMgKmFuZCogcGh5c2ljYWwgbGluayBoZWFkZXJzDQoNCiAgMjAwNy0wMy0yNiBGculk6XJpYyBCZXJub24gKGJhc2VkIG9uIHBhdGNoIGZyb20gRG1pdHJ5IFBvdGFwb3YpDQogICogYXBpX2xpYi5jOiBwYXRjaCBmb3IgbmV0Y29ubl93cml0ZSgpLCBmaXhlcyBhIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoaWNoIGNhdXNlDQogICAgdG8gc2VuZCBzb21lIGdhcmJhZ2UuIEl0IGlzIG5vdCBhIGRlZmluaXRpdmUgc29sdXRpb24sIGJ1dCB0aGUgcGF0Y2ggZG9lcyBzb2x2ZQ0KICAgIHRoZSBwcm9ibGVtIGZvciBtb3N0IGNhc2VzLg0KDQogIDIwMDctMDMtMjIgRnLpZOlyaWMgQmVybm9uDQogICogYXBpX21zZy5oLCBhcGlfbXNnLmM6IFJlbW92ZSBvYnNvbGV0ZSBBUElfTVNHX0FDQ0VQVCBhbmQgZG9fYWNjZXB0IChuZXZlciB1c2VkKS4NCg0KICAyMDA3LTAzLTIyIEZy6WTpcmljIEJlcm5vbg0KICAqIGFwaV9saWIuYzogc29tZXMgcmVzb3VyY2VzIGNvdWxkbid0IGJlIGZyZWVkIGlmIHRoZXJlIHdhcyBlcnJvcnMgZHVyaW5nDQogICAgbmV0Y29ubl9uZXdfd2l0aF9wcm90b19hbmRfY2FsbGJhY2suDQoNCiAgMjAwNy0wMy0yMiBGculk6XJpYyBCZXJub24NCiAgKiBldGhlcm5ldGlmLmM6IHVwZGF0ZSBuZXRpZi0+aW5wdXQgY2FsbHMgdG8gY2hlY2sgcmV0dXJuIHZhbHVlLiBJbiBvbGRlciBwb3J0cywNCiAgICBpdCdzIGEgZ29vZCBpZGVhIHRvIHVwZ3JhZGUgdGhlbSwgZXZlbiBpZiBiZWZvcmUsIHRoZXJlIGNvdWxkIGJlIGFub3RoZXIgcHJvYmxlbQ0KICAgIChhY2Nlc3MgdG8gYW4gdW5pbml0aWFsaXplZCBtYWlsYm94KS4NCg0KICAyMDA3LTAzLTIxIFNpbW9uIEdvbGRzY2htaWR0DQogICogc29ja2V0cy5jOiBmaXhlZCBidWcgIzUwNjcgKGVzc2VudGlhbHkgYSBzaWduZWQvdW5zaWduZWQgd2FybmluZyBmaXhlZA0KICAgIGJ5IGNhc3RpbmcgdG8gdW5zaWduZWQpLg0KDQogIDIwMDctMDMtMjEgRnLpZOlyaWMgQmVybm9uDQogICogYXBpX2xpYi5jLCBhcGlfbXNnLmMsIHRjcGlwLmM6IGludGVncmF0ZSBzeXNfbWJveF9mZXRjaChjb25uLT5tYm94LCBOVUxMKSBjYWxscyBmcm9tDQogICAgYXBpX2xpYi5jIHRvIHRjcGlwLmMncyB0Y3BpcF9hcGltc2coKS4gTm93LCB1c2UgYSBsb2NhbCB2YXJpYWJsZSBhbmQgbm90IGENCiAgICBkeW5hbWljIG9uZSBmcm9tIG1lbXAgdG8gc2VuZCB0Y3BpcF9tc2cgdG8gdGNwaXBfdGhyZWFkIGluIGEgc3luY2hyb25lIGNhbGwuDQogICAgRnJlZSB0Y3BpcF9tc2cgZnJvbSB0Y3BpcF9hcGltc2cgaXMgbm90IGRvbmUgaW4gdGNwaXBfdGhyZWFkLiBUaGlzIGdpdmUgYQ0KICAgIGZhc3RlciBhbmQgbW9yZSByZWxpYWJsZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gYXBpX2xpYiBhbmQgdGNwaXAuDQoNCiAgMjAwNy0wMy0yMSBGculk6XJpYyBCZXJub24NCiAgKiBvcHQuaDogQWRkIExXSVBfTkVUSUZfQ0FMTEJBQ0sgKHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcpIGFuZCBzZXQgaXQgdG8gMC4NCg0KICAyMDA3LTAzLTIxIEZy6WTpcmljIEJlcm5vbg0KICAqIGFwaV9tc2cuYywgaWdtcC5jLCBpZ21wLmg6IEZpeCBDKysgc3R5bGUgY29tbWVudHMNCg0KICAyMDA3LTAzLTIxIEtpZXJhbiBNYW5zbGV5DQogICogb3B0LmggQ2hhbmdlIGRlZmF1bHQgUEJVRl9QT09MX0JVRlNJWkUgdG8gYWNjb21vZGF0ZSBkZWZhdWx0IE1TUyArDQogICAgSVAgYW5kIFRDUCBoZWFkZXJzDQoNCiAgMjAwNy0wMy0yMSBLaWVyYW4gTWFuc2xleQ0KICAqIEZpeCBhbGwgdXNlcyBvZiBwYnVmX2hlYWRlciB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLiAgSW4gc29tZQ0KICAgIGNhc2VzIGp1c3QgYXNzZXJ0IGlmIGl0IGZhaWxzIGFzIEknbSBub3Qgc3VyZSBob3cgdG8gZml4IHRoZW0sIGJ1dA0KICAgIHRoaXMgaXMgbm8gd29yc2UgdGhhbiBiZWZvcmUgd2hlbiB0aGV5IHdvdWxkIGNhcnJ5IG9uIHJlZ2FyZGxlc3MNCiAgICBvZiB0aGUgZmFpbHVyZS4NCg0KICAyMDA3LTAzLTIxIEtpZXJhbiBNYW5zbGV5DQogICogc29ja2V0cy5jLCBpZ21wLmMsIGlnbXAuaCwgbWVtcC5oOiBGaXggQysrIHN0eWxlIGNvbW1lbnRzIGFuZA0KICAgIGNvbW1lbnQgb3V0IG1pc3NpbmcgaGVhZGVyIGluY2x1ZGUgaW4gaWNtcC5jDQoNCiAgMjAwNy0wMy0yMCBGculk6XJpYyBCZXJub24NCiAgKiBtZW1wLmgsIHN0YXRzLmM6IEZpeCBzdGF0c19kaXNwbGF5IGZ1bmN0aW9uIHdoZXJlIG1lbXBfbmFtZXMgdGFibGUgd2Fzbid0DQogICAgc3luY2hyb25pemVkIHdpdGggbWVtcC5oLg0KDQogIDIwMDctMDMtMjAgRnLpZOlyaWMgQmVybm9uDQogICogdGNwaXAuYzogSW5pdGlhbGl6ZSB0Y3BpcCdzIG1ib3gsIGFuZCB2ZXJpZnkgaWYgaW5pdGlhbGl6ZWQgaW4gdGNwaXBfaW5wdXQsDQogICAgdGNwaXBfZXRoaW5wdXQsIHRjcGlwX2NhbGxiYWNrLCB0Y3BpcF9hcGltc2csIHRvIGZpeCBhIGluaXQgcHJvYmxlbSB3aXRoIA0KICAgIG5ldHdvcmsgaW50ZXJmYWNlcy4gQWxzbyBmaXggYSBjb21waWxlciB3YXJuaW5nLg0KDQogIDIwMDctMDMtMjAgS2llcmFuIE1hbnNsZXkNCiAgKiB1ZHAuYzogT25seSB0cnkgYW5kIHVzZSBwYnVmX2hlYWRlcigpIHRvIG1ha2Ugc3BhY2UgZm9yIGhlYWRlcnMgaWYNCiAgICBub3QgYSBST00gb3IgUkVGIHBidWYuDQoNCiAgMjAwNy0wMy0xOSBGculk6XJpYyBCZXJub24NCiAgKiBhcGlfbXNnLmgsIGFwaV9tc2cuYywgdGNwaXAuaCwgdGNwaXAuYzogQWRkIHJldHVybiB0eXBlcyB0byB0Y3BpcF9hcGltc2coKQ0KICAgIGFuZCBhcGlfbXNnX3Bvc3QoKS4NCg0KICAyMDA3LTAzLTE5IEZy6WTpcmljIEJlcm5vbg0KICAqIFJlbW92ZSB1bmltcGxlbWVudGVkICJtZW1wX3JlYWxsb2MiIGZ1bmN0aW9uIGZyb20gbWVtcC5oLg0KDQogIDIwMDctMDMtMTEgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBwYnVmLmM6IGNoZWNrZWQgaW4gcGF0Y2ggIzU3OTY6IHBidWZfYWxsb2M6IGxlbiBmaWVsZCBjbGFjdWxhdGlvbiBjYXVzZWQNCiAgICBtZW1vcnkgY29ycnVwdGlvbi4NCg0KICAyMDA3LTAzLTExIFNpbW9uIEdvbGRzY2htaWR0IChiYXNlZCBvbiBwYXRjaCBmcm9tIERtaXRyeSBQb3RhcG92KQ0KICAqIGFwaV9saWIuYywgc29ja2V0cy5jLCBhcGkuaCwgYXBpX21zZy5oLCBzb2NrZXRzLmg6IEZpeGVkIGJ1ZyAjMTkyNTENCiAgICAobWlzc2luZyBgY29uc3QnIHF1YWxpZmllciBpbiBzb2NrZXQgZnVuY3Rpb25zKSwgdG8gZ2V0IG1vcmUgY29tcGF0aWJsZSB0bw0KICAgIHN0YW5kYXJkIFBPU0lYIHNvY2tldHMuDQoNCiAgMjAwNy0wMy0xMSBGculk6XJpYyBCZXJub24gKGJhc2VkIG9uIHBhdGNoIGZyb20gRG1pdHJ5IFBvdGFwb3YpDQogICogc29ja2V0cy5jOiBBZGQgYXNzZXJ0cyBpbnNpZGUgYmluZCwgY29ubmVjdCBhbmQgc2VuZHRvIHRvIGNoZWNrIGlucHV0DQogICAgcGFyYW1ldGVycy4gUmVtb3ZlIGV4Y2Vzc2l2ZSBzZXRfZXJybm8oKSBjYWxscyBhZnRlciBnZXRfc29ja2V0KCksIGJlY2F1c2UNCiAgICBlcnJubyBpcyBzZXQgaW5zaWRlIG9mIGdldF9zb2NrZXQoKS4gTW92ZSBsYXN0IHNvY2tfc2V0X2Vycm5vKCkgaW5zaWRlDQogICAgbHdpcF9jbG9zZS4NCg0KICAyMDA3LTAzLTA5IFNpbW9uIEdvbGRzY2htaWR0DQogICogbWVtcC5jOiBGaXhlZCBidWcgIzExNDAwOiBOZXcgZXRoYXJwIHF1ZXVlaW5nIGludHJvZHVjZWQgYnVnOiBtZW1wX21lbW9yeQ0KICAgIHdhcyBhbGxvY2F0ZWQgdG9vIHNtYWxsLg0KDQogIDIwMDctMDMtMDYgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB0Y3BpcC5jOiBJbml0aWFsaXplIGRoY3AgdGltZXJzIGluIHRjcGlwX3RocmVhZCAoaWYgTFdJUF9ESENQKSB0byBwcm90ZWN0DQogICAgdGhlIHN0YWNrIGZyb20gY29uY3VycmVudCBhY2Nlc3MuDQoNCiAgMjAwNy0wMy0wNiBGculk6XJpYyBCZXJub24sIERtaXRyeSBQb3RhcG92DQogICogdGNwaXAuYywgaXBfZnJhZy5jLCBldGhlcm5ldGlmLmM6IEZpeCBzb21lIGJ1aWxkIHByb2JsZW1zLCBhbmQgYSByZWR1bmRhbmN5DQogICAgY2FsbCB0byAibHdpcF9zdGF0cy5saW5rLnJlY3YrKzsiIGluIGxvd19sZXZlbF9pbnB1dCgpICYgZXRoZXJuZXRpZl9pbnB1dCgpLg0KDQogIDIwMDctMDMtMDYgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBpcF9mcmFnLmMsIGlwX2ZyYWcuaDogUmVkdWNlIGNvZGUgc2l6ZTogZG9uJ3QgaW5jbHVkZSBjb2RlIGluIHRob3NlIGZpbGVzDQogICAgaWYgSVBfRlJBRyA9PSAwIGFuZCBJUF9SRUFTU0VNQkxZID09IDANCg0KICAyMDA3LTAzLTA2IEZy6WTpcmljIEJlcm5vbiwgU2ltb24gR29sZHNjaG1pZHQNCiAgKiBvcHQuaCwgaXBfZnJhZy5oLCB0Y3BpcC5oLCB0Y3BpcC5jLCBldGhlcm5ldGlmLmM6IGFkZCBuZXcgY29uZmlndXJhdGlvbg0KICAgIG9wdGlvbiBuYW1lZCBFVEhBUlBfVENQSVBfRVRISU5QVVQsIHdoaWNoIGVuYWJsZSB0aGUgbmV3IHRjcGlwX2V0aGlucHV0Lg0KICAgIEFsbG93IHRvIGRvIEFSUCBwcm9jZXNzaW5nIGZvciBpbmNvbWluZyBwYWNrZXRzIGluc2lkZSB0Y3BpcF90aHJlYWQNCiAgICAocHJvdGVjdGluZyBBUlAgbGF5ZXIgYWdhaW5zdCBjb25jdXJyZW50IGFjY2VzcykuIFlvdSBjYW4gYWxzbyBkaXNhYmxlDQogICAgb2xkIGNvZGUgdXNpbmcgdGNwX2lucHV0IHdpdGggbmV3IGRlZmluZSBFVEhBUlBfVENQSVBfSU5QVVQgc2V0IHRvIDAuDQogICAgT2xkZXIgcG9ydHMgaGF2ZSB0byB1c2UgdGNwaXBfZXRoaW5wdXQuDQoNCiAgMjAwNy0wMy0wNiBTaW1vbiBHb2xkc2NobWlkdCAoYmFzZWQgb24gcGF0Y2ggZnJvbSBEbWl0cnkgUG90YXBvdikNCiAgKiBlcnIuaCwgZXJyLmM6IGZpeGVkIGNvbXBpbGVyIHdhcm5pbmcgImluaXRpYWxpemF0aW9uIGRpcmNhcmRzIHF1YWxpZmllcnMNCiAgICBmcm9tIHBvaW50ZXIgdGFyZ2V0IHR5cGUiDQoNCiAgMjAwNy0wMy0wNSBGculk6XJpYyBCZXJub24NCiAgKiBvcHQuaCwgc29ja2V0cy5oOiBhZGQgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoTFdJUF9QT1NJWF9TT0NLRVRTX0lPX05BTUVTLA0KICAgIEVUSEFSUF9UUlVTVF9JUF9NQUMsIHJldmlldyBTT19SRVVTRSkNCg0KICAyMDA3LTAzLTA0IEZy6WTpcmljIEJlcm5vbg0KICAqIGFwaV9tc2cuYzogUmVtb3ZlIHNvbWUgY29tcGlsZXIgd2FybmluZ3MgOiBwYXJhbWV0ZXIgInBjYiIgd2FzIG5ldmVyDQogICAgcmVmZXJlbmNlZC4NCg0KICAyMDA3LTAzLTA0IEZy6WTpcmljIEJlcm5vbg0KICAqIGFwaV9saWIuYzogRml4ICJbcGF0Y2ggIzU3NjRdIGFwaV9saWIuYyBjbGVhbnVwOiBhZnRlciBwYXRjaCAjNTY4NyIgKGZyb20NCiAgICBEbWl0cnkgUG90YXBvdikuDQogICAgVGhlIGFwaV9tc2cgc3RydWN0IHN0YXkgb24gdGhlIHN0YWNrIChub3QgbW92ZWQgdG8gbmV0Y29ubiBzdHJ1Y3QpLg0KDQogIDIwMDctMDMtMDQgU2ltb24gR29sZHNjaG1pZHQgKGJhc2VkIG9uIHBhdGNoIGZyb20gRG1pdHJ5IFBvdGFwb3YpDQogICogcGJ1Zi5jOiBGaXggQlVHIzE5MTY4IC0gcGJ1Zl9mcmVlIGNhbiBjYXVzZSBkZWFkbG9jayAoaWYNCiAgICBTWVNfTElHSFRXRUlHSFRfUFJPVD0xICYgZnJlZWluZyBQQlVGX1JBTSB3aGVuIG1lbV9zZW0gaXMgbm90IGF2YWlsYWJsZSkNCiAgICBBbHNvIGZpeGVkIGNhc3Qgd2FybmluZyBpbiBwYnVmX2FsbG9jKCkNCg0KICAyMDA3LTAzLTA0IFNpbW9uIEdvbGRzY2htaWR0DQogICogZXRoYXJwLmMsIGV0aGFycC5oLCBtZW1wLmMsIG1lbXAuaCwgb3B0Lmg6IEZpeCBCVUcjMTE0MDAgLSBkb24ndCBjb3JydXB0DQogICAgZXhpc3RpbmcgcGJ1ZiBjaGFpbiB3aGVuIGVucXVldWluZyBtdWx0aXBsZSBwYnVmcyB0byBhIHBlbmRpbmcgQVJQIHJlcXVlc3QNCg0KICAyMDA3LTAzLTAzIEZy6WTpcmljIEJlcm5vbg0KICAqIHVkcC5jOiByZW1vdmUgb2Jzb2xldGUgbGluZSAic3RhdGljIHN0cnVjdCB1ZHBfcGNiICpwY2JfY2FjaGUgPSBOVUxMOyINCiAgICBJdCBpcyBzdGF0aWMsIGFuZCBuZXZlciB1c2VkIGluIHVkcC5jIGV4Y2VwdCB1ZHBfaW5pdCgpLg0KDQogIDIwMDctMDMtMDIgU2ltb24gR29sZHNjaG1pZHQNCiAgKiB0Y3BpcC5jOiBNb3ZlZCBjYWxsIHRvIGlwX2luaXQoKSwgdWRwX2luaXQoKSBhbmQgdGNwX2luaXQoKSBmcm9tDQogICAgdGNwaXBfdGhyZWFkKCkgdG8gdGNwaXBfaW5pdCgpLiBUaGlzIHdheSwgcmF3IEFQSSBjb25uZWN0aW9ucyBjYW4gYmUNCiAgICBpbml0aWFsaXplZCBiZWZvcmUgdGNwaXBfdGhyZWFkIGlzIHJ1bm5pbmcgKGUuZy4gYmVmb3JlIE9TIGlzIHN0YXJ0ZWQpDQoNCiAgMjAwNy0wMy0wMiBGculk6XJpYyBCZXJub24NCiAgKiByYXdhcGkudHh0OiBGaXggZG9jdW1lbnRhdGlvbiBtaXNtYXRjaCB3aXRoIGV0aGFycC5oIGFib3V0IGV0aGFycF90bXIncyBjYWxsDQogICAgaW50ZXJ2YWwuDQoNCiAgMjAwNy0wMi0yOCBLaWVyYW4gTWFuc2xleSANCiAgKiBwYnVmLmM6IEZpeCBCVUcjMTc2NDUgLSBlbnN1cmUgcGJ1ZiBwYXlsb2FkIHBvaW50ZXIgaXMgbm90IG1vdmVkDQogICAgb3V0c2lkZSB0aGUgcmVnaW9uIG9mIHRoZSBwYnVmIGJ5IHBidWZfaGVhZGVyKCkNCg0KICAyMDA3LTAyLTI4IEtpZXJhbiBNYW5zbGV5IA0KICAqIHNvY2tldHMuYzogRml4IEJVRyMxOTE2MSAtIGVuc3VyZSBtaWxsaXNlY29uZHMgdGltZW91dCBpcyBub24temVybw0KICAgIHdoZW4gc3VwcGxpZWQgdGltZW91dCBpcyBhbHNvIG5vbi16ZXJvIA0KDQooU1RBQkxFLTEuMi4wKQ0KDQogIDIwMDYtMTItMDUgTGVvbiBXb2VzdGVuYmVyZw0KICAqIENIQU5HRUxPRzogTWVudGlvbiBTVEFCTEUtMS4yLjAgcmVsZWFzZS4NCg0KICArKyBOZXcgZmVhdHVyZXM6DQoNCiAgMjAwNi0xMi0wMSBDaHJpc3RpYWFuIFNpbW9ucw0KICAqIG1lbS5oLCBvcHQuaDogQWRkZWQgTUVNX0xJQkNfTUFMTE9DIG9wdGlvbi4NCiAgICBOb3RlIHRoaXMgaXMgYSB3b3JrYXJvdW5kLiBDdXJyZW50bHkgSSBoYXZlIG5vIG90aGVyIG9wdGlvbnMgbGVmdC4NCg0KICAyMDA2LTEwLTI2IENocmlzdGlhYW4gU2ltb25zIChhY2NlcHRlZCBwYXRjaCBieSBKb25hdGhhbiBMYXJtb3VyKQ0KICAqIGlwdjQvaXBfZnJhZy5jOiByZW5hbWUgTUFYX01UVSB0byBJUF9GUkFHX01BWF9NVFUgYW5kIG1vdmUgZGVmaW5lDQogICAgdG8gaW5jbHVkZS9sd2lwL29wdC5oLg0KICAqIGlwdjQvbHdpcC9pcF9mcmFnLmg6IFJlbW92ZSB1bnVzZWQgSVBfUkVBU1NfSU5URVJWQUwuDQogICAgTW92ZSBJUF9SRUFTU19NQVhBR0UgYW5kIElQX1JFQVNTX0JVRlNJWkUgdG8gaW5jbHVkZS9sd2lwL29wdC5oLg0KICAqIG9wdC5oOiBBZGQgYWJvdmUgbmV3IG9wdGlvbnMuDQoNCiAgMjAwNi0wOC0xOCBDaHJpc3RpYWFuIFNpbW9ucw0KICAqIHRjcF97aW4sb3V0fS5jOiBhZGRlZCBTTk1QIGNvdW50ZXJzLg0KICAqIGlwdjQvaXAuYzogYWRkZWQgU05NUCBjb3VudGVycy4NCiAgKiBpcHY0L2lwX2ZyYWcuYzogYWRkZWQgU05NUCBjb3VudGVycy4NCg0KICAyMDA2LTA4LTA4IENocmlzdGlhYW4gU2ltb25zDQogICogZXRoYXJwLntjLGh9OiBhZGRlZCBldGhhcnBfZmluZF9hZGRyKCkgdG8gcmVhZA0KICAgIChzdGFibGUpIGV0aGVybmV0L0lQIGFkZHJlc3MgcGFpciBmcm9tIEFSUCB0YWJsZQ0KDQogIDIwMDYtMDctMTQgQ2hyaXN0aWFhbiBTaW1vbnMNCiAgKiBtaWJfc3RydWN0cy5jOiBhZGRlZA0KICAqIGluY2x1ZGUvbHdpcC9zbm1wX3N0cnVjdHMuaDogYWRkZWQNCiAgKiBuZXRpZi57YyxofSwgbmV0aWYvZXRoZXJuZXRpZi5jOiBhZGRlZCBTTk1QIHN0YXRpc3RpY3MgdG8gbmV0aWYgc3RydWN0DQoNCiAgMjAwNi0wNy0wNiBDaHJpc3RpYWFuIFNpbW9ucw0KICAqIHNubXAvYXNuMV97ZW5jLGRlY30uYyBhZGRlZA0KICAqIHNubXAvbWliMi5jIGFkZGVkDQogICogc25tcC9tc2dfe2luLG91dH0uYyBhZGRlZA0KICAqIGluY2x1ZGUvbHdpcC9zbm1wX2FzbjEuaCBhZGRlZA0KICAqIGluY2x1ZGUvbHdpcC9zbm1wX21zZy5oIGFkZGVkDQogICogZG9jL3NubXBfYWdlbnQudHh0IGFkZGVkDQoNCiAgMjAwNi0wMy0yOSBDaHJpc3RpYWFuIFNpbW9ucw0KICAqIGluZXQuYywgaW5ldC5oOiBBZGRlZCBwbGF0Zm9ybSBieXRlc3dhcCBzdXBwb3J0Lg0KICAgIEFkZGVkIExXSVBfUExBVEZPUk1fQllURVNXQVAgZGVmaW5lIChkZWZhdWx0cyB0byAwKSBhbmQNCiAgICBvcHRpb25hbCBMV0lQX1BMQVRGT1JNX0hUT05TKCksIExXSVBfUExBVEZPUk1fSFRPTkwoKSBtYWNyb3MuDQoNCiAgKysgQnVnIGZpeGVzOg0KDQogIDIwMDYtMTEtMzAgQ2hyaXN0aWFhbiBTaW1vbnMNCiAgKiBkaGNwLmM6IEZpeGVkIGZhbHNlIHRyaWdnZXJzIG9mIHJlcXVlc3RfdGltZW91dC4NCg0KICAyMDA2LTExLTI4IENocmlzdGlhYW4gU2ltb25zDQogICogbmV0aWYuYzogSW4gbmV0aWZfYWRkKCkgZml4ZWQgbWlzc2luZyBjbGVhciBvZiBpcF9hZGRyLCBuZXRtYXNrLCBndyBhbmQgZmxhZ3MuDQoNCiAgMjAwNi0xMC0xMSBDaHJpc3RpYWFuIFNpbW9ucw0KICAqIGFwaV9saWIuYyBldGhhcnAuYywgaXAuYywgbWVtcC5jLCBzdGF0cy5jLCBzeXMue2MsaH0gdGNwLmg6DQogICAgUGFydGlhbGx5IGFjY2VwdGVkIHBhdGNoICM1NDQ5IGZvciBBTlNJIEMgY29tcGF0aWJpbGl0eSAvIGJ1aWxkIGZpeGVzLg0KICAqIGlwdjQvbHdpcC9pcC5oIGlwdjYvbHdpcC9pcC5oOiBDb3JyZWN0ZWQgVURQLUxpdGUgcHJvdG9jb2wNCiAgICBpZGVudGlmaWVyIGZyb20gMTcwIHRvIDEzNiAoYnVnICMxNzU3NCkuDQoNCiAgMjAwNi0xMC0xMCBDaHJpc3RpYWFuIFNpbW9ucw0KICAqIGFwaV9tc2cuYzogRml4ZWQgTmFnbGUgYWxnb3JpdGhtIGFzIHJlcG9ydGVkIGJ5IEJvYiBHcmljZS4NCg0KICAyMDA2LTA4LTE3IENocmlzdGlhYW4gU2ltb25zDQogICogdWRwLmM6IEZpeGVkIGJ1ZyAjMTcyMDAsIGFkZGVkIGNoZWNrIGZvciBicm9hZGNhc3QNCiAgICBkZXN0aW5hdGlvbnMgZm9yIFBDQnMgYm91bmQgdG8gYSB1bmljYXN0IGFkZHJlc3MuDQoNCiAgMjAwNi0wOC0wNyBDaHJpc3RpYWFuIFNpbW9ucw0KICAqIGFwaV9tc2cuYzogRmx1c2hpbmcgVENQIG91dHB1dCBpbiBkb19jbG9zZSgpIChidWcgIzE1OTI2KS4NCg0KICAyMDA2LTA2LTI3IENocmlzdGlhYW4gU2ltb25zDQogICogYXBpX21zZy5jOiBBcHBsaWVkIHBhdGNoIGZvciBjb2xkIGNhc2UgKGJ1ZyAjMTExMzUpLg0KICAgIEluIGFjY2VwdF9mdW5jdGlvbigpIGVuc3VyZSBuZXdjb25uLT5jYWxsYmFjayBpcyBhbHdheXMgaW5pdGlhbGl6ZWQuDQoNCiAgMjAwNi0wNi0xNSBDaHJpc3RpYWFuIFNpbW9ucw0KICAqIG1lbS5oOiBhZGRlZCBNRU1fU0laRV9GIGFsaWFzIHRvIGZpeCBhbiBhbmNpZW50IGNvbGQgY2FzZSAoYnVnICMxNzQ4KSwNCiAgICBmYWNpbGl0YXRlIHByaW50aW5nIG9mIG1lbV9zaXplX3QgYW5kIHUxNl90IHN0YXRpc3RpY3MuDQoNCiAgMjAwNi0wNi0xNCBDaHJpc3RpYWFuIFNpbW9ucw0KICAqIGFwaV9tc2cuYzogQXBwbGllZCBwYXRjaCAjNTE0NiB0byBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcw0KICAgIGluIGFjY2VwdCgpIGJ5IEtldmluIExhd3Nvbi4NCg0KICAyMDA2LTA1LTI2IENocmlzdGlhYW4gU2ltb25zDQogICogYXBpX2xpYi5jOiBSZW1vdmVkIGNvbm4tPnNlbSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gDQogICAgZnJvbSBuZXRjb25uX3dyaXRlKCkgYW5kIGFkZGVkIHN5c19zZW1fbmV3IHRvIG5ldGNvbm5fbmV3XyouDQoNCihTVEFCTEUtMV8xXzEpDQoNCiAgMjAwNi0wMy0wMyAgQ2hyaXN0aWFhbiBTaW1vbnMNCiAgKiBpcHY0L2lwX2ZyYWcuYzogQWRkZWQgYm91bmQtY2hlY2tpbmcgYXNzZXJ0aW9ucyBvbiBpcF9yZWFzc2JpdG1hcA0KICAgIGFjY2VzcyBhbmQgYWRkZWQgcGJ1Zl9hbGxvYygpIHJldHVybiB2YWx1ZSBjaGVja3MuDQoNCiAgMjAwNi0wMS0wMSAgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0Pg0KICAqIHRjcF97aW4sb3V0fS5jLCB0Y3Bfb3V0LmM6IFJlbW92ZWQgJ2V2ZW4gc25kYnVmJyBmaXggaW4gVENQLCB3aGljaCBpcw0KICAgIG5vdyBoYW5kbGVkIGJ5IHRoZSBjaGVja3N1bSByb3V0aW5lIHByb3Blcmx5Lg0KDQogIDIwMDYtMDItMjcgIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4NCiAgICogcGJ1Zi5jOiBGaXggYWxpZ25tZW50OyBwYnVmX2luaXQoKSB3b3VsZCBub3Qgd29yayB1bmxlc3MNCiAgICAgcGJ1Zl9wb29sX21lbW9yeVtdIHdhcyBwcm9wZXJseSBhbGlnbmVkLiAoUGF0Y2ggYnkgQ3VydCBNY0Rvd2VsbC4pDQoNCiAgMjAwNS0xMi0yMCAgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0Pg0KICAqIHRjcC5jOiBSZW1vdmUgUENCcyB3aGljaCBzdGF5IGluIExBU1RfQUNLIHN0YXRlIHRvbyBsb25nLiBQYXRjaA0KICAgIHN1Ym1pdHRlZCBieSBNaXRyYW5pIEhpcm9zaGkuDQoNCiAgMjAwNS0xMi0xNSAgQ2hyaXN0aWFhbiBTaW1vbnMNCiAgKiBpbmV0LmM6IERpc2FibGVkIHRoZSBhZGRlZCBzdW1taW5nIHJvdXRpbmUgdG8gcHJlc2VydmUgY29kZSBzcGFjZS4NCg0KICAyMDA1LTEyLTE0ICBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+DQogICogdGNwX2luLmM6IER1cGxpY2F0ZSBGSU4gQUNLIHJhY2UgY29uZGl0aW9uIGZpeCBieSBLZWx2aW4gTGF3c29uLg0KICAgIEFkZGVkIEN1cnQgTWNEb3dlbGwncyBvcHRpbWl6ZWQgY2hlY2tzdW1taW5nIHJvdXRpbmUgZm9yIGZ1dHVyZQ0KICAgIGluY2x1c2lvbi4gTmVlZCB0byBjcmVhdGUgdGVzdCBjYXNlIGZvciB1bmFsaWdlZCwgYWxpZ25lZCwgb2RkLA0KICAgIGV2ZW4gbGVuZ3RoIGNvbWJpbmF0aW9uIG9mIGNhc2VzIG9uIHZhcmlvdXMgZW5kaWFuZXNzIG1hY2hpbmVzLg0KDQogIDIwMDUtMTItMDkgIENocmlzdGlhYW4gU2ltb25zDQogICogaW5ldC5jOiBSZXdyb3RlIHN0YW5kYXJkIGNoZWNrc3VtIHJvdXRpbmUgaW4gcHJvcGVyIHBvcnRhYmxlIEMuDQoNCiAgMjAwNS0xMS0yNSAgQ2hyaXN0aWFhbiBTaW1vbnMNCiAgKiB1ZHAuYyB0Y3AuYzogUmVtb3ZlZCBTT19SRVVTRSBoYWNrLiBTaG91bGQgcmVzaWRlIGluIHNvY2tldCBjb2RlIG9ubHkuDQogICogKi5jOiBpbnRyb2R1Y2VkIGNjLmggTFdJUF9ERUJVRyBmb3JtYXR0ZXJzIG1hdGNoaW5nIHRoZSB1MTZfdCwgczE2X3QsDQogICAgdTMyX3QsIHMzMl90IHR5cGVkZWZzLiBUaGlzIHNvbHZlcyBtb3N0IGRlYnVnIHdvcmQtbGVuZ3RoIGFzc3VtZXMuDQoNCiAgMjAwNS0wNy0xNyBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+DQogICogaW5ldC5jOiBGaXhlZCB1bmFsaWduZWQgMTYtYml0IGFjY2VzcyBpbiB0aGUgc3RhbmRhcmQgY2hlY2tzdW0NCiAgICByb3V0aW5lIGJ5IFBldGVyIEpvbGFzc29uLg0KICAqIHNsaXBpZi5jOiBGaXhlZCBpbXBsZW1lbnRhdGlvbiBhc3N1bXB0aW9uIG9mIHNpbmdsZS1wYnVmIGRhdGFncmFtcy4NCg0KICAyMDA1LTAyLTA0IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4NCiAgKiB0Y3Bfb3V0LmM6IEZpeGVkIHVuaW5pdGlhbGl6ZWQgJ3F1ZXVlJyByZWZlcmVuY2VkIGluIG1lbWVyciBicmFuY2guDQogICogdGNwX3tvdXR8aW59LmM6IEFwcGxpZWQgcGF0Y2ggZml4aW5nIHVuYWxpZ25lZCBhY2Nlc3MuDQoNCiAgMjAwNS0wMS0wNCBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+DQogICogcGJ1Zi5jOiBGaXhlZCBtaXNzaW5nIHNlbWljb2xvbiBhZnRlciBMV0lQX0RFQlVHIHN0YXRlbWVudC4NCg0KICAyMDA1LTAxLTAzIExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4NCiAgKiB1ZHAuYzogVURQIHBjYi0+cmVjdigpIHdhcyBjYWxsZWQgZXZlbiB3aGVuIGl0IHdhcyBOVUxMLg0KDQooU1RBQkxFLTFfMV8wKQ0KDQogIDIwMDQtMTItMjggTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0Pg0KICAqIGV0aGFycC4qOiBEaXNhYmxlZCBtdWx0aXBsZSBwYWNrZXRzIG9uIHRoZSBBUlAgcXVldWUuDQogICAgVGhpcyBjbGFzaGVzIHdpdGggVENQIHF1ZXVlaW5nLg0KDQogIDIwMDQtMTEtMjggTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0Pg0KICAqIGV0aGFycC4qOiBGaXhlZCByYWNlIGNvbmRpdGlvbiBmcm9tIEFSUCByZXF1ZXN0IHRvIEFSUCB0aW1lb3V0Lg0KICAgIEhhbHZlZCB0aGUgQVJQIHBlcmlvZCwgZG91YmxlZCB0aGUgcGVyaW9kIGNvdW50cy4NCiAgICBFVEhBUlBfTUFYX1BFTkRJTkcgbm93IHNob3VsZCBiZSBhdCBsZWFzdCAyLiBUaGlzIHByZXZlbnRzDQogICAgdGhlIGNvdW50ZXIgZnJvbSByZWFjaGluZyAwIHJpZ2h0IGF3YXkgKHdoaWNoIHdvdWxkIGFsbG93DQogICAgdG9vIGxpdHRsZSB0aW1lIGZvciBBUlAgcmVzcG9uc2VzIHRvIGJlIHJlY2VpdmVkKS4NCg0KICAyMDA0LTExLTI1IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4NCiAgKiBkaGNwLmM6IERlY2xpbmUgbWVzc2FnZXMgd2VyZSBub3QgbXVsdGljYXN0IGJ1dCB1bmljYXN0Lg0KICAqIGV0aGFycC5jOiBFVEhBUlBfQ1JFQVRFIGlzIHJlbmFtZWQgdG8gRVRIQVJQX1RSWV9IQVJELg0KICAgIERvIG5vdCB0cnkgaGFyZCB0byBpbnNlcnQgYXJiaXRyYXJ5IHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzLA0KICAgIGV0aGFycF9pcF9pbnB1dCgpIG5vdyBjYWxscyBldGhhcnBfdXBkYXRlKCkgd2l0aG91dCBFVEhBUlBfVFJZX0hBUkQuIA0KICAgIGV0aGFycF9xdWVyeSgpIG5vdyBhbHdheXMgRE9FUyBjYWxsIEVUSEFSUF9UUllfSEFSRCBzbyB0aGF0IHVzZXJzDQogICAgcXVlcnlpbmcgYW4gYWRkcmVzcyB3aWxsIHNlZSBpdCBhcHBlYXIgaW4gdGhlIGNhY2hlIChESENQIGNvdWxkDQogICAgc3VmZmVyIGZyb20gdGhpcyB3aGVuIGEgc2VydmVyIGludmFsaWRseSBnYXZlIGFuIGluLXVzZSBhZGRyZXNzLikNCiAgKiBpcHY0L2lwX2FkZHIuaDogUmVuYW1lZCBpcF9hZGRyX21hc2tjbXAoKSB0byBfbmV0Y21wKCkgYXMgd2UgYXJlDQogICAgY29tcGFyaW5nIG5ldHdvcmsgYWRkcmVzc2VzIChpZGVudGlmaWVycyksIG5vdCB0aGUgbmV0d29yayBtYXNrcw0KICAgIHRoZW1zZWx2ZXMuDQogICogaXB2NC9pcF9hZGRyLmM6IGlwX2FkZHJfaXNicm9hZGNhc3QoKSBub3cgY2hlY2tzIHRoYXQgdGhlIGdpdmVuDQogICAgSVAgYWRkcmVzcyBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBuZXR3b3JrIG9mIHRoZSBnaXZlbiBpbnRlcmZhY2UuDQoNCiAgMjAwNC0xMS0yNCBLaWVyYW4gTWFuc2xleSA8a2ptMjVAY2FtLmFjLnVrPg0KICAqIHRjcC5jOiBJbmNyZW1lbnQgcGNiLT5zbmRfYnVmIHdoZW4gQUNLIGlzIHJlY2VpdmVkIGluIFNZTl9TRU5UIHN0YXRlLg0KDQooU1RBQkxFLTFfMV8wLVJDMSkNCg0KICAyMDA0LTEwLTE2IEtpZXJhbiBNYW5zbGV5IDxram0yNUBjYW0uYWMudWs+DQogICogdGNwLmM6IEFkZCBjb2RlIHRvIHRjcF9yZWN2ZWQoKSB0byBzZW5kIGFuIEFDSyAod2luZG93IHVwZGF0ZSkgaW1tZWRpYXRlbHksDQogICAgZXZlbiBpZiBvbmUgaXMgYWxyZWFkeSBwZW5kaW5nLCBpZiB0aGUgcmN2X3duZCBpcyBhYm92ZSBhIHRocmVzaG9sZA0KICAgIChjdXJyZW50bHkgVENQX1dORC8yKS4gVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgYSB0aW1lciB0byBleHBpcmUgdG8gc2VuZCBhDQogICAgZGVsYXllZCBBQ0sgaW4gb3JkZXIgdG8gb3BlbiB0aGUgd2luZG93IGlmIHRoZSBzdGFjayBpcyBvbmx5IHJlY2VpdmluZyBkYXRhLg0KDQogIDIwMDQtMDktMTIgS2llcmFuIE1hbnNsZXkgPGtqbTI1QGNhbS5hYy51az4NCiAgKiB0Y3AqLio6IFJldHJhbnNtaXQgdGltZS1vdXQgaGFuZGxpbmcgaW1wcm92ZW1lbnQgYnkgU2FtIEphbnNlbi4NCg0KICAyMDA0LTA4LTIwIFRvbnkgTW91bnRpZmllbGQgPHRvbnlAc29mdGlucy5jby51az4NCiAgKiBldGhhcnAuYzogTWFrZSBzdXJlIHRoZSBmaXJzdCBwYnVmIHF1ZXVlZCBvbiBhbiBBUlAgZW50cnkNCiAgICBpcyBwcm9wZXJseSByZWYgY291bnRlZC4NCg0KICAyMDA0LTA3LTI3IFRvbnkgTW91bnRpZmllbGQgPHRvbnlAc29mdGlucy5jby51az4NCiAgKiBkZWJ1Zy5oOiBBZGRlZCAoaW50KSBjYXN0IGluIExXSVBfREVCVUdGKCkgdG8gYXZvaWQgY29tcGlsZXINCiAgICB3YXJuaW5ncyBhYm91dCBjb21wYXJpc29uLg0KICAqIHBidWYuYzogU3RvcHBlZCBjb21waWxlciBjb21wbGFpbmluZyBvZiBlbXB0eSBpZiBzdGF0ZW1lbnQNCiAgICB3aGVuIExXSVBfREVCVUdGKCkgZW1wdHkuICBDbG9zZWQgYW4gdW5jbG9zZWQgY29tbWVudC4NCiAgKiB0Y3AuYzogU3RvcHBlZCBjb21waWxlciBjb21wbGFpbmluZyBvZiBlbXB0eSBpZiBzdGF0ZW1lbnQNCiAgICB3aGVuIExXSVBfREVCVUdGKCkgZW1wdHkuDQogICogaXAuaCBDb3JyZWN0ZWQgSVBIX1RPUygpIG1hY3JvOiByZXR1cm5zIGEgYnl0ZSwgc28gZG9lc24ndCBuZWVkIGh0b25zKCkuDQogICogaW5ldC5jOiBBZGRlZCBhIGNvdXBsZSBvZiBjYXN0cyB0byBxdWlldCB0aGUgY29tcGlsZXIuDQogICAgTm8gbmVlZCB0byB0ZXN0IGlzYXNjaWkoYykgYmVmb3JlIGlzZGlnaXQoYykgb3IgaXN4ZGlnaXQoYykuDQoNCiAgMjAwNC0wNy0yMiBUb255IE1vdW50aWZpZWxkIDx0b255QHNvZnRpbnMuY28udWs+DQogICogaW5ldC5jOiBNYWRlIGRhdGEgdHlwZXMgY29uc2lzdGVudCBpbiBpbmV0X250b2EoKS4NCiAgICBBZGRlZCBjYXN0cyBmb3IgcmV0dXJuIHZhbHVlcyBvZiBjaGVja3N1bSByb3V0aW5lcywgdG8gcGFjaWZ5IGNvbXBpbGVyLg0KICAqIGlwX2ZyYWcuYywgdGNwX291dC5jLCBzb2NrZXRzLmMsIHBidWYuYw0KICAgIFNtYWxsIGNvcnJlY3Rpb25zIHRvIHNvbWUgZGVidWdnaW5nIHN0YXRlbWVudHMsIHRvIHBhY2lmeSBjb21waWxlci4NCg0KICAyMDA0LTA3LTIxIFRvbnkgTW91bnRpZmllbGQgPHRvbnlAc29mdGlucy5jby51az4NCiAgKiBldGhhcnAuYzogUmVtb3ZlZCBzcHVyaW91cyBzZW1pY29sb24gYW5kIGFkZGVkIG1pc3NpbmcgZW5kLW9mLWNvbW1lbnQuDQogICogZXRoZXJuZXRpZi5jIFVwZGF0ZWQgbG93X2xldmVsX291dHB1dCgpIHRvIG1hdGNoIHByb3RvdHlwZSBmb3INCiAgICBuZXRpZi0+bGlua291dHB1dCBhbmQgY2hhbmdlZCBsb3dfbGV2ZWxfaW5wdXQoKSBzaW1pbGFybHkgZm9yIGNvbnNpc3RlbmN5Lg0KICAqIGFwaV9tc2cuYzogQ2hhbmdlZCByZWN2X3JhdygpIGZyb20gaW50IHRvIHU4X3QsIHRvIG1hdGNoIHByb3RvdHlwZQ0KICAgIG9mIHJhd19yZWN2KCkgaW4gcmF3LmggYW5kIHNvIGF2b2lkIGNvbXBpbGVyIGVycm9yLg0KICAqIHNvY2tldHMuYzogQWRkZWQgdHJpdmlhbCAoaW50KSBjYXN0IHRvIGtlZXAgY29tcGlsZXIgaGFwcGllci4NCiAgKiBpcC5jLCBuZXRpZi5jIENoYW5nZWQgZGVidWcgc3RhdGVtZW50cyB0byB1c2UgdGhlIHRpZGllciBpcDRfYWRkck4oKSBtYWNyb3MuDQoNCihTVEFCTEUtMV8wXzApDQoNCiAgKysgQ2hhbmdlczoNCg0KICAyMDA0LTA3LTA1IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4NCiAgKiBzb2NrZXRzLio6IFJlc3RydWN0dXJlZCBMV0lQX1BSSVZBVEVfVElNRVZBTC4gTWFrZSBzdXJlDQogICAgeW91ciBjYy5oIGZpbGUgZGVmaW5lcyB0aGlzIGVpdGhlciAxIG9yIDAuIElmIG5vbi1kZWZpbmVkLA0KICAgIGRlZmF1bHRzIHRvIDEuDQogICogLmM6IEFkZGVkIDxzdHJpbmcuaD4gYW5kIDxlcnJuby5oPiBpbmNsdWRlcyB3aGVyZSB1c2VkLg0KICAqIGV0aGFycC5jOiBNYWRlIHNvbWUgYXJyYXkgaW5kaWNlcyB1bnNpZ25lZC4NCg0KICAyMDA0LTA2LTI3IExlb24gV29lc3RlbmJlcmcgPGxlb24ud29lc3RlbmJlcmdAZ214Lm5ldD4NCiAgKiBuZXRpZi4qOiBBZGRlZCBuZXRpZl9zZXRfdXAoKS9kb3duKCkuDQogICogZGhjcC5jOiBDaGFuZ2VzIHRvIHJlc3RhcnQgcHJvZ3JhbSBmbG93Lg0KDQogIDIwMDQtMDUtMDcgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0Pg0KICAqIGV0aGFycC5jOiBJbiBmaW5kX2VudHJ5KCksIGluc3RlYWQgb2YgYSBsaXN0IHRyYXZlcnNhbCBwZXIgY2FuZGlkYXRlLCBkbyBhDQogICAgc2luZ2xlLXBhc3MgbG9va3VwIGZvciBkaWZmZXJlbnQgY2FuZGlkYXRlcy4gU2hvdWxkIGV4cGxvaXQgbG9jYWxpdHkuDQoNCiAgMjAwNC0wNC0yOSBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+DQogICogdGNwKi5jOiBDbGVhbmVkIHVwIHNvdXJjZSBjb21tZW50IGRvY3VtZW50YXRpb24gZm9yIERveHlnZW4gcHJvY2Vzc2luZy4NCiAgKiBvcHQuaDogRVRIQVJQX0FMV0FZU19JTlNFUlQgb3B0aW9uIHJlbW92ZWQgdG8gY29tcGx5IHdpdGggQVJQIFJGQy4NCiAgKiBldGhhcnAuYzogdXBkYXRlX2FycF9lbnRyeSgpIG9ubHkgYWRkcyBuZXcgQVJQIGVudHJpZXMgd2hlbiBhZHZpY2VkIHRvIGJ5DQogICAgdGhlIGNhbGxlci4gVGhpcyBkZXByZWNhdGVzIHRoZSBFVEhBUlBfQUxXQVlTX0lOU0VSVCBvdmVycnVsZSBvcHRpb24uDQoNCiAgKysgQnVnIGZpeGVzOg0KDQogIDIwMDQtMDQtMjcgTGVvbiBXb2VzdGVuYmVyZyA8bGVvbi53b2VzdGVuYmVyZ0BnbXgubmV0Pg0KICAqIGV0aGFycC5jOiBBcHBsaWVkIHBhdGNoIG9mIGJ1ZyAjODcwOCBieSBUb25pIE1vdW50aWZpZWxkIHdpdGggYSBzb2x1dGlvbg0KICAgIHN1Z2dlc3RlZCBieSBUaW1teSBCcm9saW4uIEZpeCBmb3IgMzItYml0IHByb2Nlc3NvcnMgdGhhdCBjYW5ub3QgYWNjZXNzDQogICAgbm9uLWFsaWduZWQgMzItYml0IHdvcmRzLCBzdWNoIGFzIHNvbXMgMzItYml0IFRDUC9JUCBoZWFkZXIgZmllbGRzLiBGaXgNCiAgICBpcyB0byBwcmVmaXggdGhlIDE0LWJpdCBFdGhlcm5ldCBoZWFkZXJzIHdpdGggdHdvIHBhZGRpbmcgYnl0ZXMuDQoNCiAgMjAwNC0wNC0yMyBMZW9uIFdvZXN0ZW5iZXJnIDxsZW9uLndvZXN0ZW5iZXJnQGdteC5uZXQ+DQogICogaXBfYWRkci5jOiBGaXggaW4gdGhlIGlwX2FkZHJfaXNicm9hZGNhc3QoKSBjaGVjay4NCiAgKiBldGhhcnAuYzogRml4ZWQgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhY2tldCB0aGF0IGluaXRpYXRlcyB0aGUgQVJQIHJlcXVlc3QNCiAgICBpcyBub3QgcXVldWVkLCBhbmQgZ2V0cyBsb3N0LiBGaXhlZCB0aGUgY2FzZSB3aGVyZSB0aGUgcGFja2V0cyBkZXN0aW5hdGlvbg0KICAgIGFkZHJlc3MgaXMgYWxyZWFkeSBrbm93bjsgd2Ugbm93IGFsd2F5cyBxdWV1ZSB0aGUgcGFja2V0IGFuZCBwZXJmb3JtIGFuIEFSUA0KICAgIHJlcXVlc3QuDQoNCihTVEFCTEUtMF83XzApDQoNCiAgKysgQnVnIGZpeGVzOg0KDQogICogRml4ZWQgVENQIGJ1ZyBmb3IgU1lOX1NFTlQgdG8gRVNUQUJMSVNIRUQgc3RhdGUgdHJhbnNpdGlvbi4NCiAgKiBGaXhlZCBUQ1AgYnVnIGluIGRlcXVldWVpbmcgb2YgRklOIGZyb20gb3V0IG9mIG9yZGVyIHNlZ21lbnQgcXVldWUuDQogICogRml4ZWQgdHdvIHBvc3NpYmxlIE5VTEwgcmVmZXJlbmNlcyBpbiByYXJlIGNhc2VzLg0KDQooU1RBQkxFLTBfNl82KQ0KDQogICsrIEJ1ZyBmaXhlczoNCg0KICAqIEZpeGVkIERIQ1Agd2hpY2ggZGlkIG5vdCBpbmNsdWRlIHRoZSBJUCBhZGRyZXNzIGluIERFQ0xJTkUgbWVzc2FnZXMuDQoNCiAgKysgQ2hhbmdlczoNCg0KICAqIGV0aGFycC5jIGhhcyBiZWVuIGhhdWxlZCBvdmVyIGEgYml0Lg0KDQooU1RBQkxFLTBfNl81KQ0KDQogICsrIEJ1ZyBmaXhlczoNCg0KICAqIEZpeGVkIFRDUCBidWcgaW5kdWNlZCBieSBiYWQgd2luZG93IHJlc2l6aW5nIHdpdGggdW5pZGlyZWN0aW9uYWwgVENQIHRyYWZmaWMuDQogICogUGFja2V0cyBzZW50IGZyb20gQVJQIHF1ZXVlIGhhZCBpbnZhbGlkIHNvdXJjZSBoYXJkd2FyZSBhZGRyZXNzLg0KDQogICsrIENoYW5nZXM6DQoNCiAgKiBQYXNzLWJ5IEFSUCByZXF1ZXN0cyBkbyBub3cgdXBkYXRlIHRoZSBjYWNoZS4NCg0KICArKyBOZXcgZmVhdHVyZXM6DQoNCiAgKiBObyBsb25nZXIgZGVwZW5kZW50IG9uIGN0eXBlLmguDQogICogTmV3IHNvY2tldCBvcHRpb25zLg0KICAqIFJhdyBJUCBwY2Igc3VwcG9ydC4NCg0KKFNUQUJMRS0wXzZfNCkNCg0KICArKyBCdWcgZml4ZXM6DQoNCiAgKiBTb21lIGRlYnVnIGZvcm1hdHRlcnMgYW5kIGNhc3RzIGZpeGVkLg0KICAqIE51bWVyZW91cyBmaXhlcyBpbiBQUFAuDQoNCiAgKysgQ2hhbmdlczoNCg0KICAqIERFQlVHRiBub3cgaXMgTFdJUF9ERUJVR0YNCiAgKiBwYnVmX2RlY2hhaW4oKSBoYXMgYmVlbiByZS1lbmFibGVkLg0KICAqIE1lbnRpb25lZCB0aGUgY2hhbmdlZCB1c2Ugb2YgQ1ZTIGJyYW5jaGVzIGluIFJFQURNRS4NCg0KKFNUQUJMRS0wXzZfMykNCg0KICArKyBCdWcgZml4ZXM6DQoNCiAgKiBGaXhlZCBwb29sIHBidWYgbWVtb3J5IGxlYWsgaW4gcGJ1Zl9hbGxvYygpLg0KICAgIE9jY3VyZWQgaWYgbm90IGVub3VnaCBQQlVGX1BPT0wgcGJ1ZnMgZm9yIGEgcGFja2V0IHBidWYgY2hhaW4uDQogICAgUmVwb3J0ZWQgYnkgU2F2aW4gWmxvYmVjLg0KDQogICogUEJVRl9QT09MIGNoYWlucyBoYWQgdGhlaXIgdG90X2xlbiBmaWVsZCBub3Qgc2V0IGZvciBub24tZmlyc3QNCiAgICBwYnVmcy4gRml4ZWQgaW4gcGJ1Zl9hbGxvYygpLg0KDQogICsrIE5ldyBmZWF0dXJlczoNCg0KICAqIEFkZGVkIFBQUCBzdGFjayBjb250cmlidXRlZCBieSBNYXJjIEJvdWNoZXINCg0KICArKyBDaGFuZ2VzOg0KDQogICogTm93IGRyb3BzIHNob3J0IHBhY2tldHMgZm9yIElDTVAvVURQL1RDUCBwcm90b2NvbHMuIE1vcmUgcm9idXN0Lg0KDQogICogQVJQIHF1ZXVldWluZyBub3cgcXVldWVzIHRoZSBsYXRlc3QgcGFja2V0IGluc3RlYWQgb2YgdGhlIGZpcnN0Lg0KICAgIFRoaXMgaXMgdGhlIFJGQyByZWNvbW1lbmRlZCBiZWhhdmlvdXIsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBpbg0KICAgIGx3aXBvcHRzLmguDQoNCigwLjYuMikNCg0KICArKyBCdWdmaXhlczoNCg0KICAqIFRDUCBoYXMgYmVlbiBmaXhlZCB0byBkZWFsIHdpdGggdGhlIG5ldyB1c2Ugb2YgdGhlIHBidWYtPnJlZg0KICAgIGNvdW50ZXIuDQoNCiAgKiBESENQIGRoY3BfaW5mb3JtKCkgY3Jhc2ggYnVnIGZpeGVkLg0KDQogICsrIENoYW5nZXM6DQoNCiAgKiBSZW1vdmVkIHBidWZfcG9vbF9mcmVlX2NhY2hlIGFuZCBwYnVmX3Bvb2xfYWxsb2NfY2FjaGUuIEFsc28gcmVtb3ZlZA0KICAgIHBidWZfcmVmcmVzaCgpLiBUaGlzIGhhcyBzcGVkIHVwIHBidWYgcG9vbCBvcGVyYXRpb25zIGNvbnNpZGVyYWJseS4NCiAgICBJbXBsZW1lbnRlZCBieSBEYXZpZCBIYWFzLg0KDQooMC42LjEpDQoNCiAgKysgTmV3IGZlYXR1cmVzOg0KDQogICogVGhlIHBhY2tldCBidWZmZXIgaW1wbGVtZW50YXRpb24gaGFzIGJlZW4gZW5oYW5jZWQgdG8gc3VwcG9ydA0KICAgIHplcm8tY29weSBhbmQgY29weS1vbi1kZW1hbmQgZm9yIHBhY2tldCBidWZmZXJzIHdoaWNoIGhhdmUgdGhlaXINCiAgICBwYXlsb2FkcyBpbiBhcHBsaWNhdGlvbi1tYW5hZ2VkIG1lbW9yeS4NCiAgICBJbXBsZW1lbnRlZCBieSBEYXZpZCBIYWFzLg0KDQogICAgVXNlIFBCVUZfUkVGIHRvIG1ha2UgYSBwYnVmIHJlZmVyIHRvIFJBTS4gbHdJUCB3aWxsIHVzZSB6ZXJvLWNvcHkNCiAgICBpZiBhbiBvdXRnb2luZyBwYWNrZXQgY2FuIGJlIGRpcmVjdGx5IHNlbnQgb24gdGhlIGxpbmssIG9yIHBlcmZvcm0NCiAgICBhIGNvcHktb24tZGVtYW5kIHdoZW4gbmVjZXNzYXJ5Lg0KDQogICAgVGhlIGFwcGxpY2F0aW9uIGNhbiBzYWZlbHkgYXNzdW1lIHRoZSBwYWNrZXQgaXMgc2VudCwgYW5kIHRoZSBSQU0NCiAgICBpcyBhdmFpbGFibGUgdG8gdGhlIGFwcGxpY2F0aW9uIGRpcmVjdGx5IGFmdGVyIGNhbGxpbmcgdWRwX3NlbmQoKQ0KICAgIG9yIHNpbWlsYXIgZnVuY3Rpb24uDQoNCiAgKysgQnVnZml4ZXM6DQoNCiAgKiBBUlBfUVVFVUVJTkcgc2hvdWxkIG5vdyBjb3JyZWN0bHkgd29yayBmb3IgYWxsIGNhc2VzLCBpbmNsdWRpbmcNCiAgICBQQlVGX1JFRi4NCiAgICBJbXBsZW1lbnRlZCBieSBMZW9uIFdvZXN0ZW5iZXJnLg0KDQogICsrIENoYW5nZXM6DQoNCiAgKiBJUF9BRERSX0FOWSBpcyBubyBsb25nZXIgYSBOVUxMIHBvaW50ZXIuIEluc3RlYWQsIGl0IGlzIGEgcG9pbnRlcg0KICAgIHRvIGEgJzAuMC4wLjAnIElQIGFkZHJlc3MuDQoNCiAgKiBUaGUgcGFja2V0IGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBpcyBjaGFuZ2VkLiBUaGUgcGJ1Zi0+cmVmIGNvdW50ZXINCiAgICBtZWFuaW5nIGhhcyBjaGFuZ2VkLCBhbmQgc2V2ZXJhbCBwYnVmIGZ1bmN0aW9ucyBoYXZlIGJlZW4NCiAgICBhZGFwdGVkIGFjY29yZGluZ2x5Lg0KDQogICogbmV0aWYgZHJpdmVycyBoYXZlIHRvIGJlIGNoYW5nZWQgdG8gc2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCBmaWVsZA0KICAgIHRoYXQgbXVzdCBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHkgYnkgdGhlIGRyaXZlciAoaGludDogNiBmb3IgRXRoZXJuZXQgTUFDKS4NCiAgICBTZWUgdGhlIGNvbnRyaWIvcG9ydHMvYzE2eCBjczg5MDAgZHJpdmVyIGFzIGEgZHJpdmVyIGV4YW1wbGUuDQoNCiAgKiBuZXRpZidzIGhhdmUgYSBkaGNwIGZpZWxkIHRoYXQgbXVzdCBiZSBpbml0aWFsaXplZCB0byBOVUxMIGJ5IHRoZSBkcml2ZXIuDQogICAgU2VlIHRoZSBjb250cmliL3BvcnRzL2MxNnggY3M4OTAwIGRyaXZlciBhcyBhIGRyaXZlciBleGFtcGxlLg0KDQooMC41LngpIFRoaXMgZmlsZSBoYXMgYmVlbiB1bm1haW50YWluZWQgdXAgdG8gMC42LjEuIEFsbCBjaGFuZ2VzIGFyZQ0KICBsb2dnZWQgaW4gQ1ZTIGJ1dCBoYXZlIG5vdCBiZWVuIGV4cGxhaW5lZCBoZXJlLg0KDQooMC41LjMpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjUuMg0KDQogICsrIEJ1Z2ZpeGVzOg0KDQogICogbWVtcF9tYWxsb2MoTUVNUF9BUElfTVNHKSBjb3VsZCBmYWlsIHdpdGggbXVsdGlwbGUgYXBwbGljYXRpb24NCiAgICB0aHJlYWRzIGJlY2F1c2UgaXQgd2Fzbid0IHByb3RlY3RlZCBieSBzZW1hcGhvcmVzLg0KDQogICsrIE90aGVyIGNoYW5nZXM6DQoNCiAgKiBzdHJ1Y3QgaXBfYWRkciBub3cgcGFja2VkLg0KDQogICogVGhlIG5hbWUgb2YgdGhlIHRpbWUgdmFyaWFibGUgaW4gYXJwLmMgaGFzIGJlZW4gY2hhbmdlZCB0byBjdGltZQ0KICAgIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSB0aW1lKCkgZnVuY3Rpb24uDQoNCigwLjUuMikgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNS4xDQoNCiAgKysgTmV3IGZlYXR1cmVzOg0KDQogICogQSBuZXcgVENQIGZ1bmN0aW9uLCB0Y3BfdG1yKCksIG5vdyBoYW5kbGVzIGJvdGggVENQIHRpbWVycy4NCg0KICArKyBCdWdmaXhlczoNCg0KICAqIEEgYnVnIGluIHRjcF9wYXJzZW9wdCgpIGNvdWxkIGNhdXNlIHRoZSBzdGFjayB0byBoYW5nIGJlY2F1c2Ugb2YgYQ0KICAgIG1hbGZvcm1lZCBUQ1Agb3B0aW9uLg0KDQogICogVGhlIGFkZHJlc3Mgb2YgbmV3IGNvbm5lY3Rpb25zIGluIHRoZSBhY2NlcHQoKSBmdW5jdGlvbiBpbiB0aGUgQlNEDQogICAgc29ja2V0IGxpYnJhcnkgd2FzIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4NCg0KICAqIHBidWZfZGVjaGFpbigpIGRpZCBub3QgdXBkYXRlIHRoZSAtPnRvdF9sZW4gZmllbGQgb2YgdGhlIHRhaWwuDQoNCiAgKiBBYm9ydGVkIFRDUCBjb25uZWN0aW9ucyB3ZXJlIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBpbiBhbGwNCiAgICBzaXR1YXRpb25zLg0KDQogICsrIE90aGVyIGNoYW5nZXM6DQoNCiAgKiBBbGwgcHJvdG9jb2wgaGVhZGVyIHN0cnVjdHMgYXJlIG5vdyBwYWNrZWQuDQoNCiAgKiBUaGUgLT5sZW4gZmllbGQgaW4gdGhlIHRjcF9zZWcgc3RydWN0dXJlIG5vdyBjb3VudHMgdGhlIGFjdHVhbA0KICAgIGFtb3VudCBvZiBkYXRhLCBhbmQgZG9lcyBub3QgYWRkIG9uZSBmb3IgU1lOIGFuZCBGSU4gc2VnbWVudHMuDQoNCigwLjUuMSkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNS4wDQoNCiAgKysgTmV3IGZlYXR1cmVzOg0KDQogICogUG9zc2libGUgdG8gcnVuIGFzIGEgdXNlciBwcm9jZXNzIHVuZGVyIExpbnV4Lg0KDQogICogUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgY3Jvc3MgcGxhdGZvcm0gcGFja2VkIHN0cnVjdHMuDQoNCiAgKiBBUlAgdGltZXIgbm93IGltcGxlbWVudGVkLg0KDQogICsrIEJ1Z2ZpeGVzOg0KDQogICogVENQIG91dHB1dCBxdWV1ZSBsZW5ndGggd2FzIGJhZGx5IGluaXRpYWxpemVkIHdoZW4gb3BlbmluZw0KICAgIGNvbm5lY3Rpb25zLg0KDQogICogVENQIGRlbGF5ZWQgQUNLcyB3ZXJlIG5vdCBzZW50IGNvcnJlY3RseS4NCg0KICAqIEV4cGxpY2l0IGluaXRpYWxpemF0aW9uIG9mIEJTUyBzZWdtZW50IHZhcmlhYmxlcy4NCg0KICAqIHJlYWQoKSBpbiBCU0Qgc29ja2V0IGxpYnJhcnkgY291bGQgZHJvcCBkYXRhLg0KDQogICogUHJvYmxlbXMgd2l0aCBtZW1vcnkgYWxpZ25tZW50Lg0KDQogICogU2l0dWF0aW9ucyB3aGVuIGFsbCBUQ1AgYnVmZmVycyB3ZXJlIHVzZWQgY291bGQgbGVhZCB0bw0KICAgIHN0YXJ2YXRpb24uDQoNCiAgKiBUQ1AgTVNTIG9wdGlvbiB3YXNuJ3QgcGFyc2VkIGNvcnJlY3RseS4NCg0KICAqIFByb2JsZW1zIHdpdGggVURQIGNoZWNrc3VtIGNhbGN1bGF0aW9uLg0KDQogICogSVAgbXVsdGljYXN0IGFkZHJlc3MgdGVzdHMgaGFkIGVuZGlhbmVzcyBwcm9ibGVtcy4NCg0KICAqIEFSUCByZXF1ZXN0cyBoYWQgd3JvbmcgZGVzdGluYXRpb24gaGFyZHdhcmUgYWRkcmVzcy4NCg0KICArKyBPdGhlciBjaGFuZ2VzOg0KDQogICogc3RydWN0IGV0aF9hZGRyIGNoYW5nZWQgZnJvbSB1MTZfdFszXSBhcnJheSB0byB1OF90WzZdLg0KDQogICogQSAtPmxpbmtvdXRwdXQoKSBtZW1iZXIgd2FzIGFkZGVkIHRvIHN0cnVjdCBuZXRpZi4NCg0KICAqIFRDUCBhbmQgVURQIC0+ZGVzdF8qIHN0cnVjdCBtZW1iZXJzIHdoZXJlIGNoYW5nZWQgdG8gLT5yZW1vdGVfKi4NCg0KICAqIG50b2gqIG1hY3JvcyBhcmUgbm93IG51bGwgZGVmaW5pdGlvbnMgZm9yIGJpZyBlbmRpYW4gQ1BVcy4NCg0KKDAuNS4wKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC40LjINCg0KICArKyBOZXcgZmVhdHVyZXM6DQoNCiAgKiBSZWRlc2lnbmVkIG9wZXJhdGluZyBzeXN0ZW0gZW11bGF0aW9uIGxheWVyIHRvIG1ha2UgcG9ydGluZyBlYXNpZXIuDQoNCiAgKiBCZXR0ZXIgY29udHJvbCBvdmVyIFRDUCBvdXRwdXQgYnVmZmVycy4NCg0KICAqIERvY3VtZW5hdGlvbiBhZGRlZC4NCg0KICArKyBCdWdmaXhlczoNCg0KICAqIExvY2tpbmcgaXNzdWVzIGluIGJ1ZmZlciBtYW5hZ2VtZW50Lg0KDQogICogQnVnZml4ZXMgaW4gdGhlIHNlcXVlbnRpYWwgQVBJLg0KDQogICogSVAgZm9yd2FyZGluZyBjb3VsZCBjYXVzZSBtZW1vcnkgbGVha2FnZS4gVGhpcyBoYXMgYmVlbiBmaXhlZC4NCg0KICArKyBPdGhlciBjaGFuZ2VzOg0KDQogICogRGlyZWN0b3J5IHN0cnVjdHVyZSBzb21ld2hhdCBjaGFuZ2VkOyB0aGUgY29yZS8gdHJlZSBoYXMgYmVlbg0KICAgIGNvbGxhcHNlZC4NCg0KKDAuNC4yKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC40LjENCg0KICArKyBOZXcgZmVhdHVyZXM6DQoNCiAgKiBFeHBlcmltZW50YWwgQVJQIGltcGxlbWVudGF0aW9uIGFkZGVkLg0KDQogICogU2tlbGV0b24gRXRoZXJuZXQgZHJpdmVyIGFkZGVkLg0KDQogICogRXhwZXJpbWVudGFsIEJTRCBzb2NrZXQgQVBJIGxpYnJhcnkgYWRkZWQuDQoNCiAgKysgQnVnZml4ZXM6DQoNCiAgKiBJbiB2ZXJ5IGludGVuc2Ugc2l0dWF0aW9ucywgbWVtb3J5IGxlYWthZ2UgY291bGQgb2NjdXIuIFRoaXMgaGFzDQogICAgYmVlbiBmaXhlZC4NCg0KICArKyBPdGhlciBjaGFuZ2VzOg0KDQogICogVmFyaWFibGVzIG5hbWVkICJkYXRhIiBhbmQgImNvZGUiIGhhdmUgYmVlbiByZW5hbWVkIGluIG9yZGVyIHRvDQogICAgYXZvaWQgbmFtZSBjb25mbGljdHMgaW4gY2VydGFpbiBjb21waWxlcnMuDQoNCiAgKiBWYXJpYWJsZSsrIGhhdmUgaW4gYXBwbGljaWFibGUgY2FzZXMgYmVlbiB0cmFuc2xhdGVkIHRvICsrdmFyaWFibGUNCiAgICBzaW5jZSBzb21lIGNvbXBpbGVycyBnZW5lcmF0ZSBiZXR0ZXIgY29kZSBpbiB0aGUgbGF0dGVyIGNhc2UuDQoNCigwLjQuMSkgQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDAuNA0KDQogICsrIE5ldyBmZWF0dXJlczoNCg0KICAqIFRDUDogQ29ubmVjdGlvbiBhdHRlbXB0cyB0aW1lIG91dCBlYXJsaWVyIHRoYW4gZGF0YQ0KICAgIHRyYW5zbWlzc2lvbnMuIE5hZ2xlIGFsZ29yaXRobSBpbXBsZW1lbnRlZC4gUHVzaCBmbGFnIHNldCBvbiB0aGUNCiAgICBsYXN0IHNlZ21lbnQgaW4gYSBidXJzdC4NCg0KICAqIFVEUDogZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIFVEUC1MaXRlIGV4dGVuc2lvbnMuDQoNCiAgKysgQnVnZml4ZXM6DQoNCiAgKiBUQ1A6IG91dCBvZiBvcmRlciBzZWdtZW50cyB3ZXJlIGluIHNvbWUgY2FzZXMgaGFuZGxlZCBpbmNvcnJlY3RseSwNCiAgICBhbmQgdGhpcyBoYXMgbm93IGJlZW4gZml4ZWQuIERlbGF5ZWQgYWNrbm93bGVkZ2VtZW50cyB3YXMgYnJva2VuDQogICAgaW4gMC40LCBoYXMgbm93IGJlZW4gZml4ZWQuIEJpbmRpbmcgdG8gYW4gYWRkcmVzcyB0aGF0IGlzIGluIHVzZQ0KICAgIG5vdyByZXN1bHRzIGluIGFuIGVycm9yLiBSZXNldCBjb25uZWN0aW9ucyBzb21ldGltZXMgaHVuZyBhbg0KICAgIGFwcGxpY2F0aW9uOyB0aGlzIGhhcyBiZWVuIGZpeGVkLg0KDQogICogQ2hlY2tzdW0gY2FsY3VsYXRpb24gc29tZXRpbWVzIGZhaWxlZCBmb3IgY2hhaW5lZCBwYnVmcyB3aXRoIG9kZA0KICAgIGxlbmd0aHMuIFRoaXMgaGFzIGJlZW4gZml4ZWQuDQoNCiAgKiBBUEk6IGEgbG90IG9mIGJ1ZyBmaXhlcyBpbiB0aGUgQVBJLiBUaGUgVURQIEFQSSBoYXMgYmVlbiBpbXByb3ZlZA0KICAgIGFuZCB0ZXN0ZWQuIEVycm9yIHJlcG9ydGluZyBhbmQgaGFuZGxpbmcgaGFzIGJlZW4NCiAgICBpbXByb3ZlZC4gTG9naWNhbCBmbGF3cyBhbmQgcmFjZSBjb25kaXRpb25zIGZvciBpbmNvbWluZyBUQ1ANCiAgICBjb25uZWN0aW9ucyBoYXMgYmVlbiBmb3VuZCBhbmQgcmVtb3ZlZC4NCg0KICAqIE1lbW9yeSBtYW5hZ2VyOiBhbGlnbm1lbnQgaXNzdWVzLiBSZWFsbG9jYXRpbmcgbWVtb3J5IHNvbWV0aW1lcw0KICAgIGZhaWxlZCwgdGhpcyBoYXMgYmVlbiBmaXhlZC4NCg0KICAqIEdlbmVyaWMgbGlicmFyeTogYmNvcHkgd2FzIGZsYXdlZCBhbmQgaGFzIGJlZW4gZml4ZWQuDQoNCiAgKysgT3RoZXIgY2hhbmdlczoNCg0KICAqIEFQSTogYWxsIGRhdGF0eXBlcyBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gZ2VuZXJpYyBvbmVzIHN1Y2ggYXMNCiAgICBpbnRzLCB0byBzcGVjaWZpZWQgb25lcyBzdWNoIGFzIHUxNl90LiBGdW5jdGlvbnMgdGhhdCByZXR1cm4NCiAgICBlcnJvcnMgbm93IGhhdmUgdGhlIGNvcnJlY3QgdHlwZSAoZXJyX3QpLg0KDQogICogR2VuZXJhbDogQSBsb3Qgb2YgY29kZSBjbGVhbmVkIHVwIGFuZCBkZWJ1Z2dpbmcgY29kZSByZW1vdmVkLiBNYW55DQogICAgcG9ydGFiaWxpdHkgaXNzdWVzIGhhdmUgYmVlbiBmaXhlZC4NCg0KICAqIFRoZSBsaWNlbnNlIHdhcyBjaGFuZ2VkOyB0aGUgYWR2ZXJ0aXNpbmcgY2xhdXNlIHdhcyByZW1vdmVkLg0KDQogICogQzY0IHBvcnQgYWRkZWQuDQoNCiAgKiBUaGFua3M6IEh1Z2UgdGhhbmtzIGdvIHRvIERhZ2FuIEdhbGFybmVhdSwgSG9yc3QgR2FybmV0emtlLCBQZXRyaQ0KICAgIEtvc3VuZW4sIE1pa2FlbCBDYWxlcmVzLCBhbmQgRnJpdHMgV2lsbWluayBmb3IgcmVwb3J0aW5nIGFuZA0KICAgIGZpeGluZyBidWdzIQ0KDQooMC40KSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC4zLjENCg0KICAqIE1lbW9yeSBtYW5hZ2VtZW50IGhhcyBiZWVuIHJhZGljYWxseSBjaGFuZ2VkOyBpbnN0ZWFkIG9mDQogICAgYWxsb2NhdGluZyBtZW1vcnkgZnJvbSBhIHNoYXJlZCBoZWFwLCBtZW1vcnkgZm9yIG9iamVjdHMgdGhhdCBhcmUNCiAgICByYXBpZGx5IGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgaXMgbm93IGtlcHQgaW4gcG9vbHMuIEFsbG9jYXRpb24NCiAgICBhbmQgZGVhbGxvY2F0aW9uIGZyb20gdGhvc2UgbWVtb3J5IHBvb2xzIGlzIHZlcnkgZmFzdC4gVGhlIHNoYXJlZA0KICAgIGhlYXAgaXMgc3RpbGwgcHJlc2VudCBidXQgaXMgdXNlZCBsZXNzIGZyZXF1ZW50bHkuDQoNCiAgKiBUaGUgbWVtb3J5LCBtZW1vcnkgcG9vbCwgYW5kIHBhY2tldCBidWZmZXIgc3Vic3lzdGVtcyBub3cgc3VwcG9ydA0KICAgIDQtLCAyLSwgb3IgMS1ieXRlIGFsaWdubWVudC4NCg0KICAqICJPdXQgb2YgbWVtb3J5IiBzaXR1YXRpb25zIGFyZSBoYW5kbGVkIGluIGEgbW9yZSByb2J1c3Qgd2F5Lg0KDQogICogU3RhY2sgdXNhZ2UgaGFzIGJlZW4gcmVkdWNlZC4NCg0KICAqIEVhc2llciBjb25maWd1cmF0aW9uIG9mIGx3SVAgcGFyYW1ldGVycyBzdWNoIGFzIG1lbW9yeSB1c2FnZSwNCiAgICBUVExzLCBzdGF0aXN0aWNzIGdhdGhlcmluZywgZXRjLiBBbGwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZQ0KICAgIG5vdyBrZXB0IGluIGEgc2luZ2xlIGhlYWRlciBmaWxlICJsd2lwb3B0cy5oIi4NCg0KICAqIFRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGhhcyBiZWVuIGNoYW5nZWQgc2xpZ2h0bHkgc28gdGhhdCBhbGwNCiAgICBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmlsZXMgYXJlIGtlcHQgdW5kZXIgdGhlIHNyYy9hcmNoDQogICAgaGllcmFyY2h5Lg0KDQogICogRXJyb3IgcHJvcGFnYXRpb24gaGFzIGJlZW4gaW1wcm92ZWQsIGJvdGggaW4gdGhlIHByb3RvY29sIG1vZHVsZXMNCiAgICBhbmQgaW4gdGhlIEFQSS4NCg0KICAqIFRoZSBjb2RlIGZvciB0aGUgUlRYQyBhcmNoaXRlY3R1cmUgaGFzIGJlZW4gaW1wbGVtZW50ZWQsIHRlc3RlZA0KICAgIGFuZCBwdXQgdG8gdXNlLg0KDQogICogQnVncyBoYXZlIGJlZW4gZm91bmQgYW5kIGNvcnJlY3RlZCBpbiB0aGUgVENQLCBVRFAsIElQLCBBUEksIGFuZA0KICAgIHRoZSBJbnRlcm5ldCBjaGVja3N1bSBtb2R1bGVzLg0KDQogICogQnVncyByZWxhdGVkIHRvIHBvcnRpbmcgYmV0d2VlbiBhIDMyLWJpdCBhbmQgYSAxNi1iaXQgYXJjaGl0ZWN0dXJlDQogICAgaGF2ZSBiZWVuIGZvdW5kIGFuZCBjb3JyZWN0ZWQuDQoNCiAgKiBUaGUgbGljZW5zZSBoYXMgYmVlbiBjaGFuZ2VkIHNsaWdodGx5IHRvIGNvbmZvcm0gbW9yZSB3aXRoIHRoZQ0KICAgIG9yaWdpbmFsIEJTRCBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGFkdmVydGlzZW1lbnQgY2xhdXNlLg0KDQooMC4zLjEpIENoYW5nZXMgc2luY2UgdmVyc2lvbiAwLjMNCg0KICAqIEZpeCBvZiBhIGZhdGFsIGJ1ZyBpbiB0aGUgYnVmZmVyIG1hbmFnZW1lbnQuIFBidWZzIHdpdGggYWxsb2NhdGVkDQogICAgUkFNIG5ldmVyIHJldHVybmVkIHRoZSBSQU0gd2hlbiB0aGUgcGJ1ZiB3YXMgZGVhbGxvY2F0ZWQuDQoNCiAgKiBUQ1AgY29uZ2VzdGlvbiBjb250cm9sLCB3aW5kb3cgdXBkYXRlcyBhbmQgcmV0cmFuc21pc3Npb25zIGRpZCBub3QNCiAgICB3b3JrIGNvcnJlY3RseS4gVGhpcyBoYXMgbm93IGJlZW4gZml4ZWQuDQoNCiAgKiBCdWdmaXhlcyBpbiB0aGUgQVBJLg0KDQooMC4zKSBDaGFuZ2VzIHNpbmNlIHZlcnNpb24gMC4yDQoNCiAgKiBOZXcgYW5kIGltcHJvdmVkIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIEFsbCBpbmNsdWRlIGZpbGVzIGFyZSBub3cNCiAgICBrZXB0IGluIGEgZGVkaWNhdGVkIGluY2x1ZGUvIGRpcmVjdG9yeS4NCg0KICAqIFRoZSBBUEkgbm93IGhhcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuIEEgbmV3IGZ1bmN0aW9uLA0KICAgIG5ldGNvbm5fZXJyKCksIG5vdyByZXR1cm5zIGFuIGVycm9yIGNvZGUgZm9yIHRoZSBjb25uZWN0aW9uIGluDQogICAgY2FzZSBvZiBlcnJvcnMuDQoNCiAgKiBJbXByb3ZlbWVudHMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhlIHN5c3RlbSBub3cNCiAgICBrZWVwcyBhIHBvaW50ZXIgdG8gdGhlIGxvd2VzdCBmcmVlIG1lbW9yeSBibG9jay4gQSBuZXcgZnVuY3Rpb24sDQogICAgbWVtX21hbGxvYzIoKSB0cmllcyB0byBhbGxvY2F0ZSBtZW1vcnkgb25jZSwgYW5kIGlmIGl0IGZhaWxzIHRyaWVzDQogICAgdG8gZnJlZSBzb21lIG1lbW9yeSBhbmQgcmV0cnkgdGhlIGFsbG9jYXRpb24uDQoNCiAgKiBNdWNoIHRlc3RpbmcgaGFzIGJlZW4gZG9uZSB3aXRoIGxpbWl0ZWQgbWVtb3J5DQogICAgY29uZmlndXJhdGlvbnMuIGx3SVAgbm93IGRvZXMgYSBiZXR0ZXIgam9iIHdoZW4gb3ZlcmxvYWRlZC4NCg0KICAqIFNvbWUgYnVnZml4ZXMgYW5kIGltcHJvdmVtZW50cyB0byB0aGUgYnVmZmVyIChwYnVmKSBzdWJzeXN0ZW0uDQoNCiAgKiBNYW55IGJ1Z2ZpeGVzIGluIHRoZSBUQ1AgY29kZToNCg0KICAgIC0gRml4ZWQgYSBidWcgaW4gdGNwX2Nsb3NlKCkuDQoNCiAgICAtIFRoZSBUQ1AgcmVjZWl2ZSB3aW5kb3cgd2FzIGluY29ycmVjdGx5IGNsb3NlZCB3aGVuIG91dCBvZg0KICAgICAgc2VxdWVuY2Ugc2VnbWVudHMgd2FzIHJlY2VpdmVkLiBUaGlzIGhhcyBiZWVuIGZpeGVkLg0KDQogICAgLSBDb25uZWN0aW9ucyBhcmUgbm93IHRpbWVkLW91dCBvZiB0aGUgRklOLVdBSVQtMiBzdGF0ZS4NCg0KICAgIC0gVGhlIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3cgY291bGQgaW4gc29tZSBjYXNlcyBiZSB0b28NCiAgICAgIGxhcmdlLiBUaGlzIGhhcyBiZWVuIGZpeGVkLg0KDQogICAgLSBUaGUgcmV0cmFuc21pc3Npb24gcXVldWUgY291bGQgaW4gc29tZSBjYXNlcyBiZSBzY3Jld2VkIHVwLiBUaGlzDQogICAgICBoYXMgYmVlbiBmaXhlZC4NCg0KICAgIC0gVENQIFJTVCBmbGFnIG5vdyBoYW5kbGVkIGNvcnJlY3RseS4NCg0KICAgIC0gT3V0IG9mIHNlcXVlbmNlIGRhdGEgd2FzIGluIHNvbWUgY2FzZXMgbmV2ZXIgZGVsaXZlcmVkIHRvIHRoZQ0KICAgICAgYXBwbGljYXRpb24uIFRoaXMgaGFzIGJlZW4gZml4ZWQuDQoNCiAgICAtIFJldHJhbnNtaXR0ZWQgc2VnbWVudHMgbm93IGNvbnRhaW4gdGhlIGNvcnJlY3QgYWNrbm93bGVkZ21lbnQNCiAgICAgIG51bWJlciBhbmQgYWR2ZXJ0aXNlZCB3aW5kb3cuDQoNCiAgICAtIFRDUCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGJhY2tvZmZzIGFyZSBub3QgY29ycmVjdGx5IGNvbXB1dGVkDQogICAgICAoYWxhIEJTRCkuIEFmdGVyIGEgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucywgVENQIG5vdyBnaXZlcyB1cA0KICAgICAgdGhlIGNvbm5lY3Rpb24uDQoNCiAgKiBUQ1AgY29ubmVjdGlvbnMgbm93IGFyZSBrZXB0IG9uIHRocmVlIGxpc3RzLCBvbmUgZm9yIGFjdGl2ZQ0KICAgIGNvbm5lY3Rpb25zLCBvbmUgZm9yIGxpc3RlbmluZyBjb25uZWN0aW9ucywgYW5kIG9uZSBmb3INCiAgICBjb25uZWN0aW9ucyB0aGF0IGFyZSBpbiBUSU1FLVdBSVQuIFRoaXMgZ3JlYXRseSBzcGVlZHMgdXAgdGhlIGZhc3QNCiAgICB0aW1lb3V0IHByb2Nlc3NpbmcgZm9yIHNlbmRpbmcgZGVsYXllZCBBQ0tzLg0KDQogICogVENQIG5vdyBwcm92aWRlcyBwcm9wZXIgZmVlZGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4gYQ0KICAgIGNvbm5lY3Rpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldCB1cC4NCg0KICAqIE1vcmUgY29tbWVudHMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBjb2RlLiBUaGUgY29kZSBoYXMgYWxzbyBiZWVuDQogICAgc29tZXdoYXQgY2xlYW5lZCB1cC4NCg0KKDAuMikgSW5pdGlhbCBwdWJsaWMgcmVsZWFzZS4NCg==