MjAwNS0xMi0wOSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuOS4xID09PQoKMjAwNS0xMS0yOCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogZ21vZHVsZS5jIChwYXJzZV9saWJ0b29sX2FyY2hpdmUpOiBTaWxlbmNlCgljb21waWxlciB3YXJuaW5ncy4KCjIwMDUtMTEtMTcgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjkuMCA9PT0KCjIwMDUtMDgtMjMgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjguMSA9PT0KCjIwMDUtMDgtMTIgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjguMCA9PT0KCjIwMDUtMDgtMDUgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjcuNyA9PT0KCjIwMDUtMDgtMDMgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjcuNiA9PT0KCjIwMDUtMDgtMDIgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjcuNSA9PT0KCjIwMDUtMDctMjEgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjcuNCA9PT0KCjIwMDUtMDctMTUgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjcuMyA9PT0KCQoyMDA1LTA3LTA5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQG5vdmVsbC5jb20+CgoJKiBNYWtlZmlsZS5hbTogRG9uJ3QgdXNlIHRoZSBzY3JpcHRzIGluIGJ1aWxkL3dpbjMyIHRvIGNvbXBpbGUKCWdtb2R1bGUucmMgaW50byBhIHJlc291cmNlIG9iamVjdCBmaWxlLiAoVGhpcyBtZWFucyB3ZSBsb3NlIHRoZQoJYnVpbGQgbnVtYmVyIGluY3JlbWVudCBtYWdpYywgYnV0IEkgZG91YnQgaXQgd2FzIHRoYXQgdXNlZnVsCglhbnl3YXkuKSBJbnN0ZWFkIHVzZSB3aW5kcmVzIGRpcmVjdGx5LiBUbyBwYXNzIHRoZSBub3JtYWwgLm8gZmlsZQoJcHJvZHVjZWQgYnkgd2luZHJlcyB0aHJvdWdoIGxpYnRvb2wsIHdoaWNoIHdhbnRzIC5sbyBmaWxlcywgcGFzcwoJaXQgZGlyZWN0bHkgdG8gdGhlIGxpbmtlciB1c2luZyBhIC1XbCBvcHRpb24uCgoJKiBnbW9kdWxlLnJjLmluOiBUaHVzIHJlcGxhY2UgQlVJTEROVU1CRVIgd2l0aCAwLgoKMjAwNS0wNy0wOCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoJCgkqID09PSBSZWxlYXNlZCAyLjcuMiA9PT0KCjIwMDUtMDYtMzAgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjcuMSA9PT0KCjIwMDUtMDYtMzAgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqIGdtb2R1bGUtYXIuYzogSW5jbHVkZSBzdGRsaWIuaAoKMjAwNS0wNi0yNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBub3ZlbGwuY29tPgoKCSogTWFrZWZpbGUuYW06IGxpYnRvb2wgaW5zdGFsbHMvdW5pbnN0YWxscyB0aGUgaW1wb3J0IGxpYnJhcnksIG5vCgluZWVkIHRvIGRvIGl0IG91cnNlbHZlcy4gRG8gc3RpbGwgaW5zdGFsbC91bmluc3RhbGwgdGhlIC5kZWYgZmlsZSwKCXRob3VnaC4KCjIwMDUtMDYtMjQgIFRvciBMaWxscXZpc3QgIDx0bWxAbm92ZWxsLmNvbT4KCgkqIE1ha2VmaWxlLmFtIChpbnN0YWxsLWxpYnRvb2wtaW1wb3J0LWxpYik6IEN1cnJlbnQgR05VIHRvb2xzIGRvCgl1bmRlcnN0YW5kIHRoZSBQUklWQVRFIGtleXdvcmQuCgoyMDA1LTA2LTEwICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi43LjAgPT09CgoyMDA1LTAxLTA3ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi42LjEgPT09CgoyMDA0LTEyLTMxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfb3Blbik6IEl0J3Mgd3JvbmcgdG8gY2FsbCBnX2ZpbGVfdGVzdCgpIHdpdGgKCW1vcmUgdGhhbiBvbmUgdGVzdCAoYm90aCBHX0ZJTEVfVEVTVF9FWElTVFMgYW5kIF9JU19SRUdVTEFSKS4gKEl0Cgl3b3VsZCBzdWNjZWVkIGV2ZW4gaWYgdGhlIHBhdGhuYW1lIGV4aXN0ZWQgYXMgYSBub25yZWd1bGFyIGZpbGUuKQoJSnVzdCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSIHdvcmtzIGZpbmUuICgjMTYyNTk0KQoKMjAwNC0xMi0xNiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNi4wID09PQoJCjIwMDQtMTItMDYgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogTWFrZWZpbGUuYW0KCSogZ21vZHVsZS5kZWYKCSogZ21vZHVsZS5baGNdOiBXaW4zMiBETEwgQUJJIHN0YWJpbGl0eSBjcnVmdCBsaWtlIGluIC4uL2dsaWIuCgoyMDA0LTEyLTAyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi41LjcgPT09CgkKMjAwNC0xMS0xMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNS42ID09PQoJCjIwMDQtMTEtMDQgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS13aW4zMi5jIChfZ19tb2R1bGVfb3Blbik6IEFyZ3VtZW50IGlzIGluIFVURi04LiBVc2Ugd2lkZQoJY2hhcmFjdGVyIFdpbjMyIEFQSSBpZiBwcmVzZW50LgoKCSogZ21vZHVsZS5jIChwYXJzZV9saWJ0b29sX2FyY2hpdmUsIGdfbW9kdWxlX29wZW4pOiBDb252ZXJ0IGZpbGUKCW5hbWUgdG8gVVRGLTggYmVmb3JlIHN0b3JpbmcgaW4gdGhlIGVycm9yIG1lc3NhZ2Ugc3RyaW5nLgoKCSogZ21vZHVsZS5jIChwYXJzZV9saWJ0b29sX2FyY2hpdmUpOiBVc2UgZ19vcGVuKCkuCgoyMDA0LTExLTAyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi41LjUgPT09CgoyMDA0LTEwLTI3IE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjUuNCA9PT0KCjIwMDQtMDktMTggTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNS4zID09PQoKMjAwNC0wOC0yNSBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi41LjIgPT09CgoyMDA0LTA4LTAxIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjUuMSA9PT0KClN1biBKdWwgMTggMTg6MDM6MDggMjAwNCAgU29lcmVuIFNhbmRtYW5uICA8c2FuZG1hbm5AZGFpbWkuYXUuZGs+CgoJKiA9PT0gUmVsZWFzZWQgMi41LjAgPT09CgpNb24gTWF5IDMxIDAwOjA5OjEwIDIwMDQgIE1hdHRoaWFzIENsYXNlbiAgPG1hY2xhc0BnbXguZGU+CgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBnbW9kdWxlLWFyLmMuICgjODU5MzAsIFRvbWFzINZncmVuKQoKVHVlIE1heSAxMSAyMzoyMzoyMSAyMDA0ICBNYXR0aGlhcyBDbGFzZW4gIDxtYWNsYXNAZ214LmRlPgoKCSogZ21vZHVsZS1hci5jIChfZ19tb2R1bGVfb3Blbik6IE1ha2UgaXQgY29tcGlsZSBvbiBBSVguICAKCSgjMTQxMTU5LCBNaWNoYWVsIFdpbHNvbikKCjIwMDQtMDMtMzEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS13aW4zMi5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6IE9uIEN5Z3dpbiwgdXNlIHRoZSAiY3lnIgoJcHJlZml4LCBhbmQgYWNjZXB0IGFsc28gdGhlIG5vcm1hbCAibGliIi4gKCMxMzg0MDMsIFJvZ2VyIExlaWdoKQoKVHVlIEZlYiAyNCAxNDowOToyMSAyMDA0ICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjMuMyA9PT0KClN1biBGZWIgMjIgMDI6Mjg6NDMgMjAwNCAgTWF0dGhpYXMgQ2xhc2VuICA8bWFjbGFzQGdteC5kZT4KCglCdWcgIzg1OTMwLCBMYXVyZW50IFZpdmllcjoKCQoJKiBnbW9kdWxlLWFyLmM6IEltcGxlbWVudGF0aW9uIG9mIG5hdGl2ZSBtb2R1bGUgbWFuYWdlbWVudCBmb3IgQUlYLgoJKiBnbW9kdWxlY29uZi5oLmluOiAKCSogZ21vZHVsZS5jOiBTdXBwb3J0IGdtb2R1bGUtYXIuYyAKCjIwMDMtMDEtMDEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS13aW4zMi5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6IFVzZSBnX2FzY2lpX3N0cmNhc2VjbXAoKS4KClR1ZSBEZWMgIDMgMjA6NTY6MTkgMjAwMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX29wZW4pOiBQcm9wZXJseSByZWZjb3VudCB0aGUKCW1haW4gbW9kdWxlIGlmIGl0IGlzIGFscmVhZHkgb3Blbi4gKCM5ODY0OCkKClNhdCBNYXIgIDIgMTQ6NDY6MTcgMjAwMiAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBnbW9kdWxlLWJlb3MuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpICogZ21vZHVsZS1keWxkLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKSAKCSAgZ21vZHVsZS1kbC5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6IFVzZSBHX01PRFVMRV9TVUZGSVggcmF0aGVyIHRoYW4KCWEgaGFyZGNvZGVkICIuc28iLiAoIzcyODAzKQoKU3VuIEZlYiAxNyAxODoxNToyMiAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfb3Blbik6IEZpeCB0eXBvIHdoZW4gY2hlY2tpbmcKCWlmIGZpbGUgKyBtb2R1bGVfc3VmZml4IGV4aXN0cy4gKE1pcm9zbGF3IERvYnJ6YW5za2ktTmV1bWFubiwKCSM3MTgwMSkKCjIwMDEtMTEtMjQgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogTWFrZWZpbGUuYW06IFJlbW92ZSBydWxlIGZvciB0ZXN0Z21vZHVsZS5leHAsIHRvby4KCjIwMDEtMTEtMjIgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS13aW4zMi5jOiBDdXJyZW50IHczMmFwaSBoZWFkZXJzIGRvIGluY2x1ZGUgdGxoZWxwMzIuaCwKCXNvIG5vIG5lZWQgdG8gaGF2ZSBhbiBleHRyYWN0IGZyb20gaXQgaGVyZS4KCk1vbiBOb3YgMTkgMTY6MTI6MTIgMjAwMSAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBNYWtlZmlsZS5hbSBtYWtlZmlsZS5tc2MuaW4gbWFrZWZpbGUubWluZ3cuaW46IFJlbW92ZQoJdGVzdGdtb2R1bGUgYW5kIGFzc29jaWF0ZWQgcGx1Z2luIGZpbGVzOyB3ZSBkb24ndCBuZWVkIF9ib3RoXyB0aGlzCglhbmQgLi4vdGVzdHMvbW9kdWxlLXRlc3QuYwoKMjAwMS0xMS0xNiAgTWljaGFlbCBNZWVrcyAgPG1pY2hhZWxAeGltaWFuLmNvbT4KCgkqIGdtb2R1bGUuYyAocGFyc2VfbGlidG9vbF9hcmNoaXZlKTogZml4IGxlYWsuCgoyMDAxLTEwLTMwICBEYW4gV2luc2hpcCAgPGRhbndAeGltaWFuLmNvbT4KCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGdtb2R1bGUtZHlsZC5jCgoyMDAxLTEwLTIzICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIE1ha2VmaWxlLmFtOiAoV2luMzIpOiBJZiB3ZSBoYXZlIGJ1aWx0IHRoZSBNU1ZDIGltcG9ydCBsaWJyYXJ5LAoJaW5zdGFsbCBpdC4gSW5zdGFsbCB0aGUgZ2NjIGltcG9ydCBsaWJyYXJ5LiBBbHNvIHN1cHBvcnQKCXVuaW5zdGFsbC4KCjIwMDEtMTAtMDkgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS13aW4zMi5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6IE1vcmUgVW5peCBjb21wYXRpYmlsaXR5OgoJQWRkICJsaWIiIHByZWZpeCBpbiBjYXNlIHRoZSBtb2R1bGUgbmFtZSBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdCwKCWV4Y2VwdCBpZiBpdCBlbmRzIHdpdGggIi5kbGwiIChpbiB3aGljaCBjYXNlIGl0IHByb2JhYmx5IGFscmVhZHkKCWlzIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIERMTCkuIFRoaXMgaXMgbmVlZGVkIGZvciBpbnN0YW5jZSBmb3IKCXRoZSBnZGstcGl4YnVmIGxvYWRlcnMsIHdoaWNoIGFyZSBjYWxsZWQgImxpYiouZGxsIiwgYnV0CglnZGstcGl4YnVmLWlvIGNhbGxzIGdfbW9kdWxlX2J1aWxkX3BhdGggd2l0aG91dCB0aGUgImxpYiIgcHJlZml4LgoKMjAwMS0xMC0wMyAgamFjb2IgYmVya21hbiAgPGphY29iQHhpbWlhbi5jb20+CgoJKiBsaWJncGx1Z2luX2EuYzogKGdwbHVnaW5fYV9tb2R1bGVfZnVuYyk6IAoJKiBnbW9kdWxlLmg6IHMvcmV0cml2ZS9yZXRyaWV2ZS8KCjIwMDEtMDktMjUgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogbWFrZWZpbGUubWluZ3cuaW46IEZpeCBtaXNzaW5nIGVuZCBAIGluIEBMVF9DVVJSRU5UQC4KCgkqIG1ha2VmaWxlLm1zYy5pbjogVXNlIHNhbWUgRExMIGFuZCBpbXBvcnQgbGlicmFyeSBuYW1lcyBhcwoJbGlidG9vbC4KCQoyMDAxLTA5LTE5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUucmMuaW46IENvcnJlY3QgSW50ZXJuYWxOYW1lIGFuZCBPcmlnaW5hbEZpbGVuYW1lIHRvCgltYXRjaCB3aGF0IHdlIGFjdHVhbGx5IHByb2R1Y2UuCgoyMDAxLTA5LTE4ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIE1ha2VmaWxlLmFtOiBPbiBXaW4zMiwgcGFzcyBhIGR1bW15IC1ycGF0aCBmbGFnIHRvIGxpYnRvb2wgd2hlbgoJYnVpbGRpbmcgbGliZ3BsdWdpbl9bYWJdLmxhLCBvdGhlcndpc2UgbGlidG9vbCBkb2Vzbid0IGNyZWF0ZSBhCglETEwsIGJ1dCBhIHN0YXRpYyBhcmNoaXZlLgoKMjAwMS0wNy0yMCAgSGFucyBCcmV1ZXIgIDxoYW5zQGJyZXVlci5vcmc+CgoJKiBtYWtlZmlsZS5tc2MuaW4gOiByZWZsZWN0IGdsaWIgbW92ZQoKMjAwMS0wNS0yMSAgTWFyayBNdXJuYW5lICA8TWFyay5NdXJuYW5lQGlyZWxhbmQuc3VuLmNvbT4KCgkqIGdtb2R1bGUuYyAoZ19zdHJfY2hlY2tfc3VmZml4KTogIE1vZGlmaWVkIHR5cGUgb2Ygc3RyaW5nX2xlbgoJYW5kIHN1ZmZpeF9sZW4gdG8gYmUgZ3NpemUuICBQcm9wZXJseSBhY2NvbW1vZGF0ZXMgcmV0dXJuIGZyb20KCXN0cmxlbigpLgoKMjAwMS0wNS0yOSAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfc2V0X2Vycm9yX3VuZHVwZWQpOiBEbyBub3QgZ19zdHJkdXAsIGFzCglwcm9taXNlZCBpbiB0aGUgZnVuY3Rpb24gbmFtZS4KClR1ZSBNYXkgMjkgMTI6NTc6NTEgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9zeW1ib2wpOiBlcmssIHN0cmNvbmNhdCBuZWVkcyBOVUxMIGFzIGxhc3QgYXJnLgoJbWFrZSBzdXJlIHdlIHBhc3MgbW9kdWxlIG5hbWUgd2l0aCBzdWZmaXggaW50byBiYWNrZW5kIG9wZW4uCgpNb24gTWF5IDI4IDIwOjE5OjI1IDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfb3Blbik6IGFzIGEgbGFzdCByZXNvcnQsIGlmIHdlIGNhbid0IGFjY2VzcygpCgl0aGUgbW9kdWxlLCBsZWF2ZSBpdCB1cCB0byB0aGUgcGxhdGZvcm0gYmFja2VuZHMgdG8gZmluZCBpdC4KCShmaXhlcyBpbXBsaWNpdCBzZWFyY2ggcGF0Y2ggbG9hZGluZyBpIGJyb2tlIHdpdGggbXkgbGFzdAoJY29tbWl0LCBzcG90dGVkIGJ5IFBhZHJhaWcgTydCcmlhaW4pLgoKVGh1IE1heSAyNCAwMzo0MzoxMiAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX29wZW4pOiByZW9yZGVyZWQgY29kZSBzbyB3ZSBoYXZlIGEgc2luZ2xlCgltb2R1bGUgbG9hZGluZyBwb2ludCAoZm9yIHJlbGlhYmxlIGVycm9yIG1lc3NhZ2VzKS4gZG8gYWNjZXNzKCkKCXRlc3RzIHRvIGZpZ3VyZSBwbGF1c2libGUgZmlsZSBuYW1lcy4KCW1ha2UgZXJyb3IgbWVzc2FnZXMgbW9yZSB2ZXJib3NlIHNvIHVzZXJzIGNhbmZpZ3VyZSB3aGF0J3MgZ29pbmcgb24uCgoyMDAxLTA0LTIwICBEYW4gV2luc2hpcCAgPGRhbndAeGltaWFuLmNvbT4KCgkqIGdtb2R1bGUtZHlsZC5jOiBnbW9kdWxlIGltcGxlbWVudGF0aW9uIGZvciBEYXJ3aW4vTWFjIE9TIFgKCgkqIGdtb2R1bGUuYzogCgkqIGdtb2R1bGVjb25mLmguaW46IEFkZCBnbW9kdWxlLWR5bGQgc3VwcG9ydAoKCSogdGVzdGdtb2R1bGUuYyAobWFpbik6IEZpeCBzcGVsbGluZwoKMjAwMS0wMy0xMyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJRnJvbSBFZHdhcmQgTS4gTGVlICA8dGFpbGJlcnRAeWFob28uY29tPjoKCgkqIGdtb2R1bGUtd2luMzIuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOiB1c2UgKGN5Z3dpbiBmcmllbmRseSkgZGlyCglzZXBhcmF0b3IuCgoyMDAxLTAzLTEyICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIE1ha2VmaWxlLmFtIChsaWJncGx1Z2luX2FfbGFfTElCQURELCBsaWJncGx1Z2luX2JfbGFfTElCQUREKToKCUxpbmsgd2l0aCB0aGUgbGliZ21vZHVsZSBsYSBvbmx5IG9uIFdpbjMyLgoKMjAwMS0wMy0xMCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBNYWtlZmlsZS5hbTogVXNlIHRoZSBfTElCQUREIGRlcGVuZGVuY3kgb24gbGliZ2xpYiBvbmx5IG9uIHRoZQoJV2luMzIgcGxhdGZvcm0gKGluY2x1ZGluZyBDeWd3aW4pLgoKMjAwMS0wMy0wNyAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIE1ha2VmaWxlLmFtLCBtYWtlZmlsZS5taW5ndy5pbiwgbWFrZWZpbGUubXNjLmluOiBTZXQKCUdfTE9HX0RPTUFJTiB0byBcIkdNb2R1bGVcIiBpbnN0ZWFkIG9mIGdfbG9nX2RvbWFpbl9nbW9kdWxlLgoKCSogZ21vZHVsZS5kZWYsIGdtb2R1bGUuaCwgZ21vZHVsZS5jOiBSZW1vdmVkIGdfbG9nX2RvbWFpbl9nbW9kdWxlLgoKMjAwMS0wMi0yMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLmg6IFVzZSBHX0JFR0lOX0RFQ0xTIGFuZCBHX0VORF9ERUNMUy4gRGVmaW5lCglHX01PRFVMRV9FWFBPUlQgY29ycmVjdGx5IG9uIEN5Z3dpbiwgdG9vLgoKCSogZ21vZHVsZS13aW4zMi5jIChfZ19tb2R1bGVfb3Blbik6IENvbnZlcnQgcGF0aCB0byBXaW5kb3dzIGZvcm1hdAoJb24gQ3lnd2luLgoKCSogTWFrZWZpbGUuYW0gKGxpYmdsaWIpOiBVc2UgbGliZ2xpYi0xLjMubGEgZnJvbQoJdG9wX2J1aWxkZGlyLiBJbnZva2UgbGlidG9vbCB3aXRoIC1uby11bmRlZmluZWQgZm9yIFdpbjMyIGFuZAoJQ3lnd2luLgoKMjAwMS0wMi0xNyAgSGF2b2MgUGVubmluZ3RvbiAgPGhwQHBvYm94LmNvbT4KCiAgICAgICAgQXBwbGllZCBwYXRjaCBmcm9tIFNvZXJlbiBTYW5kbWFubjoKCQoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX2Vycm9yKTogR19DT05TVF9SRVRVUk4KCShnX21vZHVsZV9uYW1lKTogR19DT05TVF9SRVRVUk4KClNhdCBGZWIgMTcgMDc6Mjc6MTUgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jOiB3b3JrIGFyb3VuZCBwbGF0Zm9ybXMgdGhhdCBoYXZlIGJyb2tlbiBSVExEX0dMT0JBTC4KCjIwMDEtMDEtMjcgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS5jOiAoV2luMzIpIE5lZWQgPGlvLmg+IGZvciBvcGVuKCkgYW5kIGNsb3NlKCkuCgoyMDAwLTEyLTIyICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ21vZHVsZS5jOiBNYWtlIGdfbW9kdWxlX29wZW4gbW9yZSB0b2xlcmFudCB3cnQgdG8gdGhlIG1vZHVsZQoJbmFtZS4gRmlyc3QgaXQgdHJpZXMgdG8gb3BlbiB0aGUgbW9kdWxlIGFzIG5hbWVkLCBpZiB0aGF0IGZhaWxzLAoJaXQgY2hlY2tzLCB3aGV0aGVyIGl0IGlzIGEgbGlidG9vbCBhcmNoaXZlIGFuZCBwYXJzZXMgaXQsIGlmIHRoYXQKCWZhaWxzIGl0IGFwcGVuZHMgdGhlIHN5c3RlbXMgc2hhcmVkIGxpYnJhcnkgc3VmZml4CgkoaS5lLiAiLnNvIikgKGlmIG5vdCBhbHJlYWR5IGZvdW5kKSBhbmQgdHJpZXMgYWdhaW4gYW5kIGlmIHRoYXQKCWZhaWxzIGl0IHRyaWVzIHRvIGFwcGVuZCB0aGUgIi5sYSIgbGlidG9vbCBzdWZmaXggKGlmIG5vdCBhbHJlYWR5Cglmb3VuZCkgYW5kIHBhcnNlcyBpdC4KCgkqIGdtb2R1bGUuYzogTG9jayByZWN1cnNpdmUgbXV0ZXggZHVyaW5nIG1vc3QgbW9kdWxlIGZ1bmN0aW9ucyBmb3IKCXNhZmV0eS4KCgkqIGdtb2R1bGUtZGwuYzogUmV0dXJuIGFuIGVycm9yIGZyb20gX2dfbW9kdWxlX3N5bWJvbCBvbmx5LCBpZgoJZGxlcnJvciBzYXlzIHNvLiBBbGwgb3RoZXIgZnVuY3Rpb25zIHJldHVybiBhbiBlcnJvciBhcyB3ZWxsLCBpZgoJZGxlcnJvciByZXR1cm5zIE5VTEwuCgoJKiB0ZXN0Z21vZHVsZS5jOiBUaGFua3MgdG8gdGhlIGFib3ZlIGNoYW5nZSB0aGUgI2lmZGVmcyBoYXZlCgl2YW5pc2hlZC4KCjIwMDAtMTAtMTUgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoQlVJTFRfRVhUUkFfRElTVCk6IE5ldyB2YXJpYWJsZS4KCShkaXN0LWhvb2spOiBIYW5kbGUgJChCVUlMVF9FWFRSQV9ESVNUKS4KCjIwMDAtMDktMjggIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbW9kdWxlLmg6IE1vdmVkIGRlY2xhcmF0aW9uIG9mIGdfbG9nX2RvbWFpbl9nbW9kdWxlIHVwIGJlZm9yZQoJdGhlIGluY2x1c2lvbiBvZiBnbGliLmggdG8gbWFrZSBpdCBjb21waWxlIG9uIG5vbi1nY2MgY29tcGlsZXJzLgoKMjAwMC0wNy0yMiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBtYWtlZmlsZS5taW5ndy5pbjogUmVtb3ZlIGxlZnRvdmVyIGdtb2R1bGUtd2luMzJyZXMubyBzdHVmZi4gVGhlCglidWlsZC1kbGwgc2NyaXB0IGF1dG9tYWdpY2FsbHkgaGFuZGxlcyByZXNvdXJjZXMuCgoyMDAwLTA3LTIwICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogbGliZ3BsdWdpbl9hLmMsIHRlc3RnbW9kdWxlLmM6IFVzZSBnX3BhdGhfZ2V0X2Jhc2VuYW1lIGluc3RlYWQKCW9mIHRoZSBkZXByZWNhdGVkIGdfYmFzZW5hbWUuCgoyMDAwLTA3LTE5ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ21vZHVsZS5oOiBpbmNsdWRlIGdsaWIuaCBiZWZvcmUgZG9pbmcgZXh0ZXJuICJDIi4gTWFrZXMgc29tZSBDKysKCWNvbXBpbGVyIGhhcHB5LiBSZXBvcnRlZCBieSBEZW5pcyBWYWthdG92Cgk8dmFrYXRvdkBwZW9ueS5ubG0ubmloLmdvdj4uCgoyMDAwLTA3LTE5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtd2luMzIuYzogRG9uJ3QgI2luY2x1ZGUgPHRsaGVscDMyLmg+IHdoZW4gY29tcGlsaW5nIHdpdGgKCWdjYywgYXMgaXQgaXNuJ3QgcHJvdmlkZWQuIERlY2xhcmF0aW9uIG9mIGEgbmVlZGVkIHN0cnVjdCAoZnJvbQoJd3d3Lm1pY3Jvc29mdC5jb20pIGluc2VydGVkIGluc3RlYWQuCgoyMDAwLTA1LTEzICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIG1ha2VmaWxlLm1pbmd3LmluOiBOZXcgZmlsZSwgd2l0aCBnbW9kdWxlIHN0dWZmCgltb3ZlZCBmcm9tIC4uL21ha2VmaWxlLm1pbmd3LmluLgoKCSogTWFrZWZpbGUuYW06IEFkZCB0byBFWFRSQV9ESVNULCBhbmQgYWRkIHJ1bGUgdG8gbWFrZSBtYWtlZmlsZS5taW5ndy4KCjIwMDAtMDUtMDIgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS13aW4zMi5jOiBObyBuZWVkIHRvIGluY2x1ZGUgPHBzYXBpLmg+CgoyMDAwLTAzLTIzICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtd2luMzIuYyAoX2dfbW9kdWxlX3N5bWJvbCk6IFdoZW4gbG9va2luZyBmb3Igc3ltYm9scyBpbgoJdGhlICJtYWluIiBtb2R1bGUgd2UgbXVzdCBzZWFyY2ggYm90aCB0aGUgbWFpbiBwcm9ncmFtIGFuZCBhbGwKCWN1cnJlbnRseSBsb2FkZWQgRExMcy4gTm90IG9ubHkgdGhlIG1haW4gcHJvZ3JhbSwgb3IgZXZlbiBqdXN0IHRoZQoJRExMcyBsb2FkZWQgYXMgZ21vZHVsZXMuICBMaWJnbGFkZSByZXF1aXJlcyB0aGlzLgoKCVRodXMgd2UgbmVlZCB0byBnZXQgYSBsaXN0IG9mIGFsbCBtb2R1bGVzIGluIHRoZSBjdXJyZW50Cglwcm9jZXNzLiBUaGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlIEFQSXMgdG8gZG8gdGhpczogUFNBUEkgYW5kCglUb29saGVscC4gVGhlIGZvcm1lciBpcyBvbmx5IGF2YWlsYWJsZSBvbiBOVCAoaW5jbHVkaW5nIFdpbjJrKSwKCXRoZSBsYXR0ZXIgb24gV2luOXggYW5kIFdpbjJrLiBDaGVjayB3aGljaCBvbmUgd29ya3MsIGFuZCB1c2UKCXRoYXQuCgoJRmlyc3QgY2hlY2sgZm9yIHRoZSBzeW1ib2wgaW4gdGhlIG1haW4gcHJvZ3JhbSwgYW5kIGlmIG5vdCBmb3VuZAoJdGhlcmUsIGluIGFsbCB0aGUgbW9kdWxlcy4KCglDb2RlIGZvciB1c2luZyBQU0FQSSBhbmQgVG9vbGhlbHAgd2FzIGJvcnJvd2VkIGZyb20gdGhlIERyLiBNaW5ndwoJdG9vbCB3cml0dGVuIGJ5IEpvc+kgRm9uc2VjYSA8ZW05NjExNUBmZS51cC5wdD4uIFRoYW5rcy4KCjIwMDAtMDMtMDQgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS13aW4zMi5jOiBDYWxsIGdfd2luMzJfZXJyb3JfbWVzc2FnZSgpIHRvIGdldCB0aGUgZXJyb3IKCW1lc3NhZ2Ugc3RyaW5ncy4KCgkqIGxpYmdwbHVnaW5fYS5jCgkqIGxpYmdwbHVnaW5fYi5jCgkqIGdtb2R1bGUuYzogUmVtb3ZlIExpYk1haW4gZnVuY3Rpb25zIHRoYXQgd2VyZSBuZWVkZWQgYnkgTENDLAoJd2hpY2ggaXMgbm90IGEgc3VwcG9ydGVkIGNvbXBpbGVyLgoKCSogdGVzdGdtb2R1bGUuYyAobWFpbik6IFRlc3QgZm9yIEdfTU9EVUxFX0lNUEwgPT0KCUdfTU9EVUxFX0lNUExfV0lOMzIsIG5vdCBHX09TX1dJTjMyLgoKCSogZ21vZHVsZWNvbmYuaC53aW4zMjogUmVtb3ZlIExDQyBzdHVmZiBmcm9tIGhlcmUsIHRvby4gCgpXZWQgTWFyICAxIDA1OjM0OjQ3IDIwMDAgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUtYmVvcy5jIChfZ19tb2R1bGVfc3ltYm9sKTogZG8gbm90IHJldHVybiBOVUxMIHN5bWJvbHMuCgoJKiBnbW9kdWxlLW9zMi5jOiByZW1vdmVkIE5ldEJTRCBzcGVjaWZpYyBkZWZpbmVzLgoJKF9nX21vZHVsZV9zZWxmKTogc2V0IGFuIGVycm9yIG1lc3NhZ2UgZm9yIHVuc3VwcG9ydGVkIGJlaGF2aW91ci4KCgkqIGdtb2R1bGUtYmVvcy5jOiBtYW55IGNvZGluZyBzdHlsZSBmaXh1cHMuCgkoX2dfbW9kdWxlX29wZW4pOgoJKF9nX21vZHVsZV9zZWxmKToKCShfZ19tb2R1bGVfY2xvc2UpOgoJKF9nX21vZHVsZV9zeW1ib2wpOiBidW5jaCBvZiBtZW1vcnkgbGVha3MgcGx1Z2dlZC4KCgkqIGdtb2R1bGUtZGwuYzogbWFrZSBzdXJlIHRoZSBlcnJvciBtZXNzYWdlIHJldHVybmVkIGZyb20gZGxlcnJvcigpCglpcyBhbHdheXMgIT0gTlVMTCwgYnkgdXNpbmcgYSB3cmFwcGVyIGZ1bmN0aW9uIGZldGNoX2RsZXJyb3IoKS4gYmFzZWQKCW9uIGEgcGF0Y2ggdG8gZml4IF9nX21vZHVsZV9zeW1ib2woKSBmb3IgTmV0QlNEIGZyb20gU2NvdHQgUHJlc25lbGwKCTxzcnBAemdpLmNvbT4uCgoJKiBnbW9kdWxlLWRsZC5jOiBtaW5vciBpbmRlbnRhdGlvbi4KCgkqIGdtb2R1bGUtd2luMzIuYzogbWlub3IgY2xlYW51cHMuCgoJKiBtZXJnZXMgZnJvbSBnbGliLTEtMi4KClNhdCBGZWIgMTkgMTk6NDM6MjkgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogdGVzdGdtb2R1bGUuYyAobWFpbik6IGFkZGVkIHRlc3QgdG8gY2hlY2sgdGhhdCBub3QgeWV0IGJvdW5kIHN5bWJvbHMKCWluIHNoYXJlZCBsaWJyYXJpZXMgb2YgdGhlIG1haW4gbW9kdWxlIGFyZSByZXRyaWV2YWJsZSwgZnJvbSBEYXZpZCBHZXJvLgoKMjAwMC0wMS0xMyAgTWFydGluIEJhdWxpZyAgPG1hcnRpbkBob21lLW9mLWxpbnV4Lm9yZz4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfb3Blbik6IENoZWNrIHdoZXRoZXIgYGNoZWNrX2luaXQnIGlzIG5vdCBOVUxMCgliZWZvcmUgd2UgYXR0ZW1wdCB0byBjYWxsIGl0LgoKU3VuIE9jdCAgMyAxOTozMDo1MiBQRFQgMTk5OSBNYW5pc2ggU2luZ2ggPHlvc2hAZ2ltcC5vcmc+CgoJKiBnbW9kdWxlLmgKCSogdGVzdGdtb2R1bGUuYzogdXNlIEdfT1Mgc3R1ZmYKClNhdCBKdWwgMjQgMjA6NDc6MTggMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogbWVyZ2VkIGNoYW5nZXMgZnJvbSBHTGliLTEtMiBicmFuY2guCgoxOTk5LTA1LTA2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUuYzogUmVtb3ZlIExpYk1haW4uCgpTYXQgTWF5ICAxIDEwOjU4OjU3IFBEVCAxOTk5IE1hbmlzaCBTaW5naCA8eW9zaEBnaW1wLm9yZz4KCgkqIE1ha2VmaWxlLmFtOiB1c2UgLWF2b2lkLXZlcnNpb24gYW5kIC1tb2R1bGUgZm9yIHRlc3QgcGx1Z2lucwoKTW9uIEFwciAxOSAwODo0Mzo1OSAxOTk5ICBhcGVAbHJkcGYuc3BhY2V0ZWMubm8gIChBc2Jqb3JuIFBldHRlcnNlbikKCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGdtb2R1bGUtb3MyLmMKCldlZCBBcHIgIDcgMjA6MTI6NTggMTk5OSAgYXBlQGxyZHBmLnNwYWNldGVjLm5vICAoQXNiam9ybiBQZXR0ZXJzZW4pCgoJKiBnbW9kdWxlLW9zMi5jOiBPUy8yIHNwZWNpZmljIGZpbGUgZm9yIGdtb2R1bGUuCgkqIGdtb2R1bGUuYyAoX2dfbW9kdWxlX29wZW4pOiBBZGQgZ21vZHVsZS1vczIuYyBpZiBHX01PRFVMRV9JTVBMX09TMi4KCSogZ21vZHVsZWNvbmYuaC5pbjogQWRkIEdfTU9EVUxFX0lNUExfT1MyLgoKRnJpIEFwciAyMyAwOTowMzo0OCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX3N5bWJvbCk6IHJlbW92ZWQgaW5saW5lIHZhcmlhYmxlIGFzc2lnbm1lbnQuCglzL0NIRUNLX0VSUk9SL1NVUFBPUlRfT1JfUkVUVVJOLyB0byBtYWtlIHRoZSBjb2RlIG1vcmUgc2VsZiBkZXNjcmlwdGl2ZS4KCldlZCBGZWIgMTAgMTI6MDY6MzAgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jIChDSEVDS19FUlJPUik6IGJlIG1vcmUgZGVzY3JpcHRpdmUgb24gdW5zdXBwb3J0ZWQgc3lzdGVtcy4KCldlZCBGZWIgMTAgMDc6NTY6MzMgMTk5OSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9lcnJvcik6IGZpeGVkIGVycmVybmVyb3VzIGNvZGUgd3J0IHRvIHRocmVhZAoJc3BlY2lmaWMgZXJyb3Igc3RyaW5nIGFsbG9jYXRpb24gaGFuZGxpbmcuCgpUaHUgSmFuIDIxIDEyOjQwOjExIEVTVCAxOTk5ICBKZWZmIEdhcnppayAgPGpnYXJ6aWtAcG9ib3guY29tPgoKCSogZ21vZHVsZS1kbC5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6CglBZGQgYnJhY2VzIHRvIGVsaW1pbmF0ZSBhbiBhbWJpZ3VvdXMgZWxzZSB3YXJuaW5nLgoKMTk5OS0wMS0xNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLWRsLmMgZ21vZHVsZS1kbGQuYzogSW4KIAlfZ19tb2R1bGVfYnVpbGRfcGF0aCwgZG9uJ3QgYWRkIHRoZSAibGliIiBwcmVmaXggYW5kCiAJIi5zbyIgb3IgIi5zbCIgc3VmZml4IGlmIGFscmVhZHkgdGhlcmUuCgoJKiBnbW9kdWxlLXdpbjMyLmM6IExpa2V3aXNlIGZvciB0aGUgIi5kbGwiIHN1ZmZpeC4KCjE5OTgtMTItMTAgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbW9kdWxlLmM6IE1hZGUgaXQgTVQgc2FmZSwgdGhlIGdfbW9kdWxlX2Vycm9yKCkgaXMgbm93IHRocmVhZAoJc3BlY2lmaWMuCgpGcmkgTm92IDIwIDE0OjQzOjQ0IDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOiBhZGRlZCBlbXB0eSBkZWZhdWx0IGltbGVtZW50YXRpb24KCXNvIGdtb2R1bGUuc28gY29tcGlsZXMgb24gc3lzdGVtcyB0aGF0IGFyZSBub3QgeWV0IHN1cHBvcnRlZCwgZml4IGZyb20KCUVyaWsgQmFnZm9ycyA8YmFnZm9yc0BocGMybi51bXUuc2U+LgoKMTk5OC0xMS0xMyAgTnVubyBGZXJyZWlyYSAgPG5tcmZAcm5sLmlzdC51dGwucHQ+CgoJKiBNYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBUaGUgcHJldmlvdXMgY29tbWl0IG1lc3NhZ2UgaXMgd3JvbmcKCWFib3V0IHRoZSAtSSQodG9wX3NyY2RpcikgYmVpbmcgcmVkdW5kYW50LiBJIHB1dCBpdCBiYWNrLgoKV2VkIE5vdiAxMSAyMzoyMzoyMiBFU1QgMTk5OCBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CgoJKiBNYWtlZmlsZS5hbSA6IElOQ0xVREVTIGlzIHRoZSByaWdodCB3YXkgdG8gYWRkIHRvIENGTEFHUywgbm90IAoJREVGUy4gIEFsc28gdGhlcmUgYXJlIGJ1Z3Mgd2l0aCAnKz0nIGluIG1ha2VmaWxlcy4KCUdvdCByaWQgb2YgREVGUyBsaW5lIGJ5IG1vdmluZyBHX0xPR19ET01BSU4gc2V0dGluZyBpbnRvIElOQ0xVREVTLgoJUmVtb3ZlZCByZWR1bmRhbnQgLUkgZnJvbSBJTkNMVURFUy4KClR1ZSBPY3QgMjcgMDQ6MDA6MTEgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogdGVzdGdtb2R1bGUuYyAobWFpbik6IGNoYW5nZWQgdGhlICNpZmRlZiBXSU4zMiB0ZXN0IHRvIE5BVElWRV9XSU4zMiwKCXRoaXMgbmVlZHMgdG8gYmUgbW9yZSBjb25zdGlzdGVudCB0aHJvdWdob3V0IHRoZSBjb2RlLCBkbyB3ZSBnbyBmb3IKCU5BVElWRV9XSU4zMiBvciBXSU4zMj8KCgkqIGdtb2R1bGUuYyAoTGliTWFpbik6IHNwZWNpYWwgY2FzZWQgdGhlICNpZmRlZiBfX0xDQ19fIGNhc2UgZm9yCglOQVRJVkVfV0lOMzIsIHNpbmNlIGxjYyBtYXliZSB1c2VkIG9uIG90aGVyIHBsYXRmb3JtcyBhcyB3ZWxsLgoJKiBsaWJncGx1Z2luX2EuYyAoTGliTWFpbik6IAoJKiBsaWJncGx1Z2luX2IuYyAoTGliTWFpbik6IAoJbGlrZXdpc2UuIG5vdCBzdXJlIGkgbGlrZSB0aGlzIHNwZWNpYWwgcmVxdWlyZW1lbnQgZm9yIGxjYyBpbiBoZXJlLgoKCSogZ21vZHVsZS1kbC5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6IAoJZmVhdHVyZSBlbXB0eSAiIiBkaXJlY3RvcmllcyBhbmQgcHJlcGVuZCB0aGUgbW9kdWxlIG5hbWUgd2l0aCAibGliIi4KCgkqIGdtb2R1bGUtZGxkLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKTogCgkqIGdtb2R1bGUtd2luMzIuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOiAKCWZlYXR1cmUgZW1wdHkgIiIgZGlyZWN0b3JpZXMuCgoJKiB3ZSBuZWVkIHNvbWUgbW9yZSBtYWdpYyBpbiB0aGUgX2dfbW9kdWxlX2J1aWxkX3BhdGggdmFyaWFudHMKCXNvIHdlIGRvbid0IGFwcGVuZC9wcmVwZW5kIGxpYiBhbmQgLnNvLCAuc2wgb3IgLmRsbCBmb3IgdGhvc2UgbmFtZXMKCXRoYXQgYWxyZWFkeSBjb250YWluIGl0LgoKCSogYXBwbGllZCBwYXRjaCBmcm9tIFRvciBMaWxscXZpc3QgZm9yIGdfbW9kdWxlX2J1aWxkX3BhdGgoKSBhbmQKCXdpbmRvd3Mgc3VwcG9ydC4KCjE5OTgtMTAtMjA6IFRvciBMaWxscXZpc3QgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlL2dtb2R1bGUtd2luMzIuYzoKCU5ldyBmaWxlLgoKCSogZ21vZHVsZS9nbW9kdWxlLmMgZ21vZHVsZS9nbW9kdWxlLmg6CglBZGRlZCB0aGUgZnVuY2lvbiBnX21vZHVsZV9idWlsZF9wYXRoIHRoYXQgYnVpbGRzIHRoZSBwYXRoIHRvCglhIG1vZHVsZSBmaWxlLCBkZWNvcmF0aW5nIHRoZSBuYW1lIGFjY29yZGluZyB0byB0aGUgc3lzdGVtJ3MKCWNvbnZlbnRpb25zLiAgQWRkZWQgdGhlIFdpbmRvd3MgaW1wbGVtZW50YXRpb24uCgoJKiBnbW9kdWxlL2xpYmdwbHVnaW5fYS5jIGdtb2R1bGUvbGliZ3BsdWdpbl9iLmM6CglBZGRlZCBMaWJNYWluIGZvciBMQ0MtV2luMzIuCgoJKiBnbW9kdWxlL3Rlc3RnbW9kdWxlLmM6CglIYW5kbGUgV2luZG93cyBkbGwgbmFtZXMuCgoxOTk4LTEwLTI1ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogZ21vZHVsZS5oOiBSZW1vdmUgYCNwcmFnbWEgfScuCgkqIGdtb2R1bGVjb25mLmguaW46IExpa2V3aXNlLgoKV2VkIE9jdCAyMSAxOTo1ODoyNyAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX3N5bWJvbCk6IGZpeGVkIGEgc3RyaW5nIHBvaW50ZXIgYnVnIHRoYXQgY291bGQKIAljYXVzZSBnYXJiYWdlIGVycm9yIG1lc3NhZ2VzIGZyb20gZ19tb2R1bGVfc3ltYm9sKCkgZm9yIHN5c3RlbXMgdGhhdAoJTkVFRF9VU0NPUkUuCgpNb24gU2VwIDIxIDAxOjU0OjQ4IDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuaDogCgkqIGdtb2R1bGUuYzogcmVuYW1lZCBvbGQgX2RlX2luaXQgZnVuY3Rpb25hbGl0eSB0byBfdW5sb2FkLgoJbW9kdWxlcyBhcmUgbm93IGV4cGVjdGVkIHRvIGV4cG9ydDoKCUdfTU9EVUxFX0VYUE9SVCBjb25zdCBnY2hhciogZ19tb2R1bGVfY2hlY2tfaW5pdCAoR01vZHVsZSAqbW9kdWxlKTsKCWFuZAoJR19NT0RVTEVfRVhQT1JUIHZvaWQgZ19tb2R1bGVfdW5sb2FkIChHTW9kdWxlICptb2R1bGUpOwoJcmV0dXJuaW5nIGEgc3RyaW5nIG90aGVyIHRoYW4gTlVMTCBmcm9tIGdfbW9kdWxlX2NoZWNrX2luaXQoKSB3aWxsCiAJcHJldmVudCB0aGUgbW9kdWxlIGZyb20gYmVpbmcgbG9hZGVkLiBhIGNhbGwgdG8gZ19tb2R1bGVfbWFrZV9yZXNpZGVudCgpCglmcm9tIGdfbW9kdWxlX3VubG9hZCgpIHdpbGwgcHJldmVudCB0aGUgbW9kdWxlIGZyb20gYmVpbmcgdW5sb2FkZWQgYW5kCglzdGlsbCBtYWtlIGl0IHJlc2lkZW50LgoKVGh1IFNlcCAxNyAwNjozNDoyMiAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmg6IAoJKiBnbW9kdWxlLmM6IGltcGxlbWVudGVkIGdfbW9kdWxlX21ha2VfcmVzaWRlbnQoKSB3aGljaCBjYW4gYmUKCXVzZWQgdG8gbWFrZSBtb2R1bGVzIHJlc2lkZW50LgoJZml4ZWQgYSBidWdsZXQgYWJvdXQgdGhlIG9wdGlvbmFsICJnX21vZHVsZV9kZV9pbml0IiBmdW5jdGlvbiBpbgoJbW9kdWxlcywgd2hpY2ggY291bGQgZ2V0IGludm9rZWQgdHdpY2Ugb24gdmVyeSBvYnNjdXJlIG9jY2FzaW9ucy4KClR1ZSBTZXAgMTUgMTQ6NTc6MzAgMTk5OCAgT3dlbiBUYXlsb3IgIDxvdGF5bG9yQHJlZGhhdC5jb20+CgoJKiBNYWtlZmlsZS5hbTogVXBkYXRlIHRvIGxpYnRvb2wtMS4yYiwKCWNoYW5nZSBsaWJyYXJ5IHZlcnNpb25pbmcgc2NoZW1lIHRvIGRyb3AgTFRfUkVMRUFTRQoJZnJvbSB0aGUgLWwgbGluZSwgd2hpbGUga2VlcGluZyBpdCBpbiB0aGUgc29uYW1lLgoKVGh1IEF1ZyAyMCAwNzowODoxNiAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmM6IHByb3ZpZGUgbm8gb3BlcmF0aW9uIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdW5kZXJseWluZwoJX2dfbW9kdWxlXyogZnVuY3Rpb25zLCBzbyB3ZSBhdCBsZWFzdCBjb21waWxlIG9uIHN5c3RlbXMgdGhhdCBoYXZlCiAJbmVpdGhlciBvZiBHX01PRFVMRV9JTVBMX0RMIG9yIEdfTU9EVUxFX0lNUExfRExELgoKTW9uIEF1ZyAxNyAwMzo0MTo1MiAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmg6CgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfb3Blbik6IGNoYW5nZWQgdGhlIHJldHVybiB0eXBlIGZvciB0aGUKCUdNb2R1bGVDaGVja0luaXQgZnVuY3Rpb24gdG8gYmUgYSBzdHJpbmcsIGRlc2NyaWJpbmcgdGhlIGVycm9yCgljb25kaXRpb24uCgkoZ19tb2R1bGVfc3ltYm9sKTogc2hvdyB0aGUgZmFpbGluZyBzeW1ib2wgb24gZXJyb3IgbWVzc2FnZXMuCgpGcmkgQXVnIDE0IDAyOjI0OjM5IDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIE1ha2VmaWxlLmFtOiBmZWF0dXJlIHRoZSBHX0xPR19ET01BSU4gbWFjcm8gdG8gc2V0IHRoZSBsb2cgZG9tYWluCgl0byAiR01vZHVsZSIgdXBvbiBjb21waWxhdGlvbi4gd2UgY3VycmVudGx5IGhhdmUgdG8gYWRkIHRoaXMgZGVmaW5pdGlvbgoJdG8gdGhlIERFRlMgdmFyaWFibGUuCgkqIHRlc3RnbW9kdWxlLmM6IHdlIG5lZWQgYW4gdWdseSAjdW5kZWYgR19MT0dfRE9NQUlOIGF0IHRoZSBzdGFydAoJb2YgdGhpcyBmaWxlIGN1cnJlbnRseSwgc2luY2UgYXV0b21ha2UgZG9lc24ndCBzdXBwb3J0IHBlciB0YXJnZXQKCV9DRkxBR1MgeWV0LgoKTW9uIEF1ZyAxMCAwMzozNTo1NyAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmM6IG1pbm9yIGNoYW5nZXMgdG8gaW50ZXJuYWwgaW50ZXJmYWNlLgoJKiBnbW9kdWxlLWRsLmM6IAoJKiBnbW9kdWxlLWRsZC5jOiBwdXQgc29tZSBjb21tZW50cyBpbnRvIHRoZSBmaWxlcywgYW5kIHByb3ZpZGVkCgliZXR0ZXIgZXJyb3IgY2hlY2tpbmcgZm9yIHNobF9maW5kc3ltKCkuIHdoaXNoIGkgaGFkIGEgc3lzdGVtIHRvCiAJdGVzdCB0aGlzIHN0dWZmIG9uLgoKTW9uIEF1ZyAxMCAwMjoxODozMSAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBNYWtlZmlsZS5hbSAobGliX0xUTElCUkFSSUVTKTogZm9yIG5vdywgc2tpcCB0aGUgZGVwZW5kZW5jeSBvbgoJLWxnbGliIGZvciBsaWJnbW9kdWxlLTEuMS5sYSwgbGliZ3BsdWdpbl9hLmxhIGFuZCBsaWJncGx1Z2luX2IubGEKCXNpbmNlIHRoaXMgY2xhc2hlcyB3aXRoIGludGVyLWxpYnJhcnktZGVwZW5kZW5jaWVzIGZvciBub3QgaW5zdGFsbGVkCglsaWJyYXJpZXMuIGdsaWItY29uZmlnIHRha2VzIGNhcmUgb2YgdGhpcyBmb3IgdGhlIHVzdWFsbCBjYXNlLCBidXQKCXRoZXJlIG5lZWRzIHRvIGJlIGEgYmV0dGVyIHdheS4uLgoKU3VuIEF1ZyAgOSAxNTo1NzozOCAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiB0ZXN0Z21vZHVsZS5jOiB0ZXN0IHByb2dyYW0gZm9yIEdNb2R1bGUuCgkqIGxpYmdwbHVnaW5fYS5jOiAKCSogbGliZ3BsdWdpbl9iLmM6IHRlc3QgcGx1Z2lucyBmb3IgdGVzdGdtb2R1bGUuYy4KCgkqIGdtb2R1bGUuaDogCgkqIGdtb2R1bGUuYzogR01vZHVsZSBsaWJyYXJ5IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBiYXNpY2FsbHkKCWEgd3JhcHBlciBhYm91dCBzeXN0ZW0gc3BlY2lmYyBkeW5hbWljIGxvYWRpbmcgZmFjaWxpdGllcy4KClN1biBBdWcgIDkgMTA6MzE6MDUgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogQ2hhbmdlTG9nIHN0YXJ0IGZvciBnbW9kdWxlLgo=