MjAwMC0wMi0wNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdmFyaWFibGUuYyAocHJpbnRfdmFyaWFibGUpOiBXcml0ZSBvdXQgZmlsZW5hbWUvbGluZW51bWJlcgoJaW5mb3JtYXRpb24gZm9yIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlmIHByZXNlbnQuCgkoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IFN0b3JlIGZpbGVuYW1lIGluZm9ybWF0aW9uIGlmIHByb3ZpZGVkLgoJKGRlZmluZV92YXJpYWJsZSwgZGVmaW5lX3ZhcmlhYmxlX2Zvcl9maWxlKTogUmVtb3ZlZC4KCSh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFVzZSBkZWZpbmVfdmFyaWFibGVfbG9jKCkgdG8ga2VlcAoJdmFyaWFibGUgZGVmaW5pdGlvbiBsb2NhdGlvbiBpbmZvcm1hdGlvbi4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogS2VlcCB2YXJpYWJsZSBkZWZpbml0aW9uIGxvY2F0aW9uIGluZm8uCgkoZG9fZGVmaW5lKTogRGl0dG8uCgkocmVjb3JkX3RhcmdldF92YXIpOiBEaXR0by4KCSogdmFyaWFibGUuaCAoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IE5ldyBmaWxlaW5mbyBhcmd1bWVudC4KCShkZWZpbmVfdmFyaWFibGUsIGRlZmluZV92YXJpYWJsZV9sb2MsIGRlZmluZV92YXJpYWJsZV9mb3JfZmlsZSk6CglEZWNsYXJlIG5ldyBtYWNyb3MuCgoJRml4IFBSLzE0MDc6CgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogUmVuYW1lIHBhdHZhciB0byBwYXRfdmFyaWFibGVzIGFuZCBtYWtlCglpdCBqdXN0IGEgdmFyaWFibGVfc2V0X2xpc3Q7IHdlIG5lZWQgb3VyIG93biBjb3B5IG9mIHRoZSBwYXR0ZXJuCgl2YXJpYWJsZSdzIHZhcmlhYmxlIHNldCBsaXN0IGhlcmUgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlIGdsb2JhbAoJb25lLgoJKiB2YXJpYWJsZS5jIChpbml0aWFsaXplX2ZpbGVfdmFyaWFibGVzKTogTW92ZSB0aGUgaW5zdGFudGlhdGlvbgoJb2YgdGhlIHBhdF92YXJpYWJsZXMgcG9pbnRlciBoZXJlLiAgT25seSBkbyB0aGUgc2VhcmNoIGFmdGVyIHdlJ3JlCglkb25lIHJlYWRpbmcgdGhlIG1ha2VmaWxlcyBzbyB3ZSBkb24ndCBzZWFyY2ggdG9vIGVhcmx5LiAgSWYKCXRoZXJlJ3MgYSBwYXRfdmFyaWFibGVzIHZhbHVlLCBzZXQgdXAgdGhlIHZhcmlhYmxlcyBuZXh0IHB0ci4KCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZF9mb3JfZmlsZSk6IFJlbW92ZSB0aGUgc2V0dXAgb2YgdGhlCglwYXRfdmFyaWFibGVzIGluZm87IGl0J3MgZG9uZSBlYXJsaWVyIG5vdyB0byBlbnN1cmUgdGhlIHBhcmVudCdzCglwYXR0ZXJuIHZhcmlhYmxlcyBhcmUgc2V0IHVwIGNvcnJlY3RseSBhcyB3ZWxsLgoKMjAwMC0wMi0wMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKHNoX2NoYXJzX2RvcykgW1dJTkRPV1MzMl06IEFkZCAiJiIgYXMgYSBzaGVsbAoJbWV0YWNoYXJhY3RlciBmb3IgdGhlIFczMiBET1Mgc2hlbGwuCglSZXBvcnRlZCBieSBXYXJyZW4gSm9uZXMgPHdqb25lc0B0Yy5mbHVrZS5jb20+LgoKMjAwMC0wMi0wMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCUZpeGVzIGZvciB0aGUgT3BlblZNUyBwb3J0IGZyb20gSGFydG11dCBCZWNrZXIgPGJlY2tlckBydG8uZGVjLmNvbT4KCgkqIGNvbmZpZy5oLXZtcyBbVk1TXTogRGVmaW5lIExPQ0FMRURJUiB0byBzb21ldGhpbmc7IG5lZWRlZCBmb3IKCXRoZSBleHBhbnNpb24gb2YgYmluZHRleHRkb21haW4oKSBldmVuIHRob3VnaCBpdCdzIGEgbm8tb3AuCgkqIHZtc2Z1bmN0aW9ucy5jIChzdHJjbXBpKTogUmVtb3ZlIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIHN0cmNtcGkoKS4KCShyZWFkZGlyKTogVXNlIERCKCkgaW5zdGVhZCBvZiB0ZXN0aW5nIGRlYnVnX2ZsYWcuCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGUpIFtWTVNdOiBTZWFyY2ggInAiIG5vdCAibmFtZSIuCgkqIGpvYi5jIFtWTVNdOiBTd2l0Y2ggZnJvbSBkZWJ1Z19mbGFnIHRvIHRoZSBuZXcgREIgbWFjcm8uICBBZGQKCXNvbWUgaTE4biBfKCkgbWFjcm9zIChldmVuIHRob3VnaCBWTVMgZG9lc24ndCB5ZXQgc3VwcG9ydCBpdCkuCgoJKiBmdW5jdGlvbi5jIChwYXRzdWJzdF9leHBhbmQpOiBDaGFuZ2UgImxlbiIgdG8gbm90IGJlIHVuc2lnbmVkIHRvCglhdm9pZCB0eXBlIG1pc21hdGNoZXMuCgoJKiBtYWluLmMgKG1haW4pOiBEZWNsYXJlIHNpZ25hbWVfaW5pdCgpIGlmIHdlJ3JlIGdvaW5nIHRvIGNhbGwgaXQuCgoyMDAwLTAxLTI5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogTWFrZWZpbGUuRE9TLnRlbXBsYXRlOiBUcmFjayBjaGFuZ2VzIGluIE1ha2VmaWxlLmluCgkoaW5zdGFsbC1yZWN1cnNpdmUsIHVuaW5zdGFsbC1yZWN1cnNpdmUpOiBBZGQgbWlzc2luZyB0YXJnZXRzLgoJKERFU1RESVIpOiBEZWZpbmUuCgkoaW5zdGFsbC1iaW5QUk9HUkFNUywgdW5pbnN0YWxsLWJpblBST0dSQU1TKTogVXNlICQoREVTVERJUikuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbX19NU0RPU19fXTogRGVmaW5lIENYWCB0byBncHAuCgoyMDAwLTAxLTI1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJQ2hhbmdlIGdldHRleHQgc3VwcG9ydCB0byB1c2UgdGhlIHNpbXBsaWZpZWQgdmVyc2lvbiBpbiBsaWJpdCAwLjcuCgoJKiBnZXRvcHQuYywgbWFrZS5oOiBVc2UgZ2V0dGV4dC5oIGluc3RlYWQgb2YgbGliaW50bC5oLgoJKiBBQk9VVC1OTFMsIGdldHRleHQuaCwgZ2V0dGV4dC5jOiBOZXcgZmlsZXMgZnJvbSBsaWJpdCAwLjcuCglNb2RpZmllZCB0byByZW1vdmUgc29tZSBzdGF0aWMgZGVjbGFyYXRpb25zIHdoaWNoIGFyZW4ndCBkZWZpbmVkLgoJKiBhY2NvbmZpZy5oOiBVc2UgbmV3IGdldHRleHQgI2RlZmluZXMuCgkqIGFjaW5jbHVkZS5tNDogQWRkIGZwX1dJVEhfR0VUVEVYVDsgcmVtb3ZlIEFNX0dOVV9HRVRURVhULgoJKiBjb25maWd1cmUuaW46IENhbGwgZnBfV0lUSF9HRVRURVhUIGluc3RlYWQuCgkqIE1ha2VmaWxlLmFtOiBOZXcgZ2V0dGV4dCBzdHVmZi4gIEFsc28gZm9yY2UgaW5jbHVzaW9uIG9mIGdsb2IKCWZpbGVzIGZvciBzeXN0ZW1zIHdoaWNoIGhhdmUgTElCQyBnbG9iLgoKCSogaTE4bi9NYWtlZmlsZS5hbSwgaTE4bi8uY3ZzaWdub3JlOiBOZXcgZGlyIGZvciB0cmFuc2xhdGlvbiBmaWxlcy4KCSogaTE4bi9kZS5wbywgaTE4bi9lcy5wbywgaTE4bi9mci5wbywgaTE4bi9rby5wbywgaTE4bi9ubC5wbzoKCSogaTE4bi9wbC5wbywgaTE4bi9ydS5wbzogSW1wb3J0IHRyYW5zbGF0aW9ucyBhbHJlYWR5IGRvbmUgZm9yCgllYXJsaWVyIHZlcnNpb25zIG9mIEdOVSBtYWtlLiAgVGhhbmtzIGZvciB0aGF0IHdvcmshIQoKCSogcG8vTWFrZWZpbGUuaW4uaW4sIHBvL1BPVEZJTEVTLmluOiBSZW1vdmVkLgoKMjAwMC0wMS0yMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChkZWNvZGVfZGVidWdfZmxhZ3MpOiBJZiBkZWJ1Z19mbGFnIGlzIHNldCwgZW5hYmxlIGFsbAoJZGVidWdnaW5nIGxldmVscy4KCShkZWJ1Z19mbGFnKTogUmVzdXJyZWN0IHRoaXMgZmxhZyB2YXJpYWJsZS4KCShzd2l0Y2hlcyk6IE1ha2UgLWQgZ2l2ZSB0aGUgb2xkIGJlaGF2aW9yIG9mIHR1cm5pbmcgb24gYWxsCglkZWJ1Z2dpbmcuICBDaGFuZ2UgLS1kZWJ1ZyBhbG9uZSB0byBlbWl0IGJhc2ljIGRlYnVnZ2luZyBhbmQgdGFrZQoJb3B0aW9uYWwgYXJndW1lbnRzIHRvIGV4cGFuZCBkZWJ1Z2dpbmcuCgkqIE5FV1M6IERvY3VtZW50IHRoZSBuZXcgZGVidWdnaW5nIG9wdGlvbnMuCgoJKiByZW1ha2UuYyAobm9fcnVsZV9lcnJvcik6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uLiAgVGhpcyB0cmllcyB0bwoJZml4IGEgcmVhbCBwcm9ibGVtLS1zZWUgdGhlIGRlc2NyaXB0aW9uIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZgoJdGhpcyBmdW5jdGlvbiBiZWxvdy4gIEhvd2V2ZXIsIHRoZSBjdXJlIGlzIHdvcnNlIHRoYW4gdGhlIGRpc2Vhc2UKCWFuZCB0aGlzIGFwcHJvYWNoIHdvbid0IHdvcmsuCgkocmVtYWtlX2ZpbGUpOiBQdXQgdGhlIGNvZGUgZnJvbSBub19ydWxlX2Vycm9yIGJhY2sgaGVyZS4KCSh1cGRhdGVfZmlsZV8xKTogUmVtb3ZlIGNhbGwgdG8gbm9fcnVsZV9lcnJvci4KCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBSZW1vdmUgbWZpbGVfc3RhdHVzIGZpZWxkLgoKMjAwMC0wMS0yMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCUludGVncmF0ZSBHTlUgZ2V0dGV4dCBzdXBwb3J0LgoKCSogY29uZmlndXJlLmluOiBBZGQgQU1fR05VX0dFVFRFWFQuCgkqIE1ha2VmaWxlLmFtOiBBZGQgb3B0aW9ucyBmb3Igc2V0dGluZyBMT0NBTEVESVIsIC1JaW50bCwgZXRjLgoJKiBhY2luY2x1ZGUubTQ6IEFkZCBnZXR0ZXh0IGF1dG9jb25mIG1hY3Jvcy4KCSogYWNjb25maWcuaDogQWRkIG5ldyBnZXR0ZXh0ICNkZWZpbmVzLgoJKiBtYWtlLmg6IEluY2x1ZGUgbGliaW50bC5oLiAgTWFrZSBzdXJlIF8oKSBhbmQgTl8oKSBtYWNyb3MgYXJlCglkZWNsYXJlZC4gIE1ha2UgZ2V0dGV4dCgpIGFuIGVtcHR5IG1hY3JvIGlzIE5MUyBpcyBkaXNhYmxlZC4KCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2ggc3dpdGNoZXNbXSk6IENhbid0IGluaXRpYWxpemUKCXN0YXRpYyBkYXRhIHdpdGggXygpIChnZXR0ZXh0IGNhbGxzKSwgc28gdXNlIE5fKCkgdGhlcmUgdGhlbiB1c2UKCWdldHRleHQoKSBkaXJlY3RseSB3aGVuIHByaW50aW5nIHRoZSBzdHJpbmdzLgoJKiByZW1ha2UuYyAobm9fcnVsZV9lcnJvcik6IFRoZSBzdHJpbmcgY29uc3RhbnRzIGNhbid0IGJlIHN0YXRpYwoJd2hlbiBpbml0aWFsaXppbmcgXygpIG1hY3Jvcy4KCSogZmlsZS5jIChwcmludF9maWxlKTogUmVmb3JtYXQgYSBmZXcgc3RyaW5ncyB0byB3b3JrIGJldHRlciBmb3IKCXRyYW5zbGF0aW9uLgoJKiBwby9QT1RGSUxFUy5pbiwgcG8vTWFrZWZpbGUuaW4uaW46IE5ldyBmaWxlcy4gIFRha2UKCU1ha2VmaWxlLmluLmluIGZyb20gdGhlIGxhdGVzdCBHTlUgdGFyIGRpc3RyaWJ1dGlvbiwgYXMgdGhhdAoJdmVyc2lvbiB3b3JrcyBiZXR0ZXIgdGhhbiB0aGUgb25lIHRoYXQgY29tZXMgd2l0aCBnZXR0ZXh0LgoJKiBORVdTOiBNZW50aW9uIGkxOG4gYWJpbGl0eS4KCjIwMDAtMDEtMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglJbnN0YWxsZWQgcGF0Y2hlcyBmb3IgdGhlIFZNUyBwb3J0LgoJUGF0Y2hlcyBwcm92aWRlZCBieTogSGFydG11dCBCZWNrZXIgPEhhcnRtdXQuQmVja2VyQGNvbXBhcS5jb20+CgoJKiByZWFkbWUudm1zLCBhcnNjYW4uYywgY29uZmlnLmgtdm1zLCBkZWZhdWx0LmMsIGRpci5jLCBmaWxlLmM6CgkqIGltcGxpY2l0LmMsIGpvYi5jLCBtYWtlLmgsIG1ha2VmaWxlLmNvbSwgbWFrZWZpbGUudm1zLCBydWxlLmM6CgkqIHZhcmlhYmxlLmMsIHZtc2Rpci5oLCB2bXNmdW5jdGlvbnMuYywgdm1zaWZ5LmMsIGdsb2IvZ2xvYi5jOgoJKiBnbG9iL2dsb2IuaDogSW5zdGFsbGVkIHBhdGNoZXMuICBTZWUgcmVhZG1lLnZtcyBmb3IgZGV0YWlscy4KCjIwMDAtMDEtMTEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglSZXNvbHZlIFBSL3h4eHg6IGRvbid0IGF1dG9tYXRpY2FsbHkgZXZhbHVhdGUgdGhlICQoY2FsbCAuLi4pCglmdW5jdGlvbidzIGFyZ3VtZW50cy4gIFdoaWxlIHdlJ3JlIGhlcmUsIGNsZWFuIHVwIGFyZ3VtZW50IHBhc3NpbmcKCXByb3RvY29sIHRvIGFsd2F5cyB1c2Ugc2ltcGxlIG51bC10ZXJtaW5hdGVkIHN0cmluZ3MsIGluc3RlYWQgb2YKCXNvbWV0aW1lcyB1c2luZyBvZmZzZXQgcG9pbnRlcnMgdG8gbWFyayB0aGUgZW5kIG9mIGFyZ3VtZW50cy4KCVRoaXMgY2hhbmdlIGFsc28gZml4ZXMgUFIvMTUxNy4KCUJvdGggUFIncyBieSBEYW1pZW4gR0lCT1UgPGRhbWllbi5naWJvdUBzdC5jb20+LgoKCSogZnVuY3Rpb24uYyAoc3RydWN0IGZ1bmN0aW9uX3RhYmxlX2VudHJ5KTogUmVtb3ZlIHRoZSBuZWdhdGl2ZQoJcmVxdWlyZWRfYXJncyBoYWNrOyBwdXQgaW4gZXhwbGljaXQgbWluIGFuZCBtYXggIyBvZiBhcmd1bWVudHMuCgkoZnVuY3Rpb25fdGFibGUpOiBBZGQgaW4gdGhlIG1heCB2YWx1ZS4gIFR1cm4gb2ZmIHRoZSBleHBhbmQgYml0Cglmb3IgZnVuY19jYWxsLgoJKGV4cGFuZF9idWlsdGluX2Z1bmN0aW9uKTogVGVzdCBhZ2FpbnN0IG1pbmltdW1fYXJncyBpbnN0ZWFkIG9mCgl0aGUgb2Jzb2xldGUgcmVxdWlyZWRfYXJncy4KCShoYW5kbGVfZnVuY3Rpb24pOiBSZXdyaXRlIHRoaXMuICBXZSBkb24ndCB0cnkgdG8gYmUgZmFuY3kgYW5kCglwYXNzIG9uZSBzdHlsZSBvZiBhcmd1bWVudHMgdG8gZXhwYW5kZWQgZnVuY3Rpb25zIGFuZCBhbm90aGVyCglzdHlsZSB0byBub24tZXhwYW5kZWQgZnVuY3Rpb25zOiBwYXNzIHBvaW50ZXJzIHRvIG51bC10ZXJtaW5hdGVkCglzdHJpbmdzIHRvIGFsbCBmdW5jdGlvbnMuCgkoZnVuY19jYWxsKTogUmV3cml0ZSB0aGlzLiAgSWYgd2UgYXJlIGludm9raW5nIGEgYnVpbHRpbiBmdW5jdGlvbgoJYW5kIGl0J3Mgc3VwcG9zZWQgdG8gaGF2ZSBpdHMgYXJndW1lbnRzIGV4cGFuZGVkLCBkbyB0aGF0IChzaW5jZQoJaXQncyBub3QgZG9uZSBieSBoYW5kbGVfZnVuY3Rpb24gZm9yICQoY2FsbCAuLi4pIGFueW1vcmUpLiAgRm9yCglub24tYnVpbHRpbnMsIGp1c3QgYWRkIHRoZSB2YXJpYWJsZXMgYXMgYmVmb3JlIGJ1dCBtYXJrIHRoZW0gYXMKCXJlY3Vyc2l2ZSBzbyB0aGV5J2xsIGJlIGV4cGFuZGVkIGxhdGVyLCBhcyBuZWVkZWQuCgkoZnVuY19pZik6IEFsbCBhcmd1bWVudHMgYXJlIHZhbmlsbGEgbnVsLXRlcm1pbmF0ZWQgc3RyaW5nczoKCXJlbW92ZSB0cmlja2VyeSB3aXRoICJhcmd2WzFdLTEiLgoJKGZ1bmNfZm9yZWFjaCk6IERpdHRvLgoKCSogZXhwYW5kLmMgKGV4cGFuZF9hcmd1bWVudCk6IElmIHRoZSBzZWNvbmQgYXJnIGlzIE5VTEwsIGV4cGFuZAoJdGhlIGVudGlyZSBmaXJzdCBhcmd1bWVudC4KCgkqIGpvYi5jIChuZXdfam9iKTogWmVybyB0aGUgY2hpbGQgc3RydWN0LiAgVGhpcyBjaGFuZ2Ugd2FzIGp1c3QKCW1hZGUgdG8ga2VlcCBzb21lIGhlYXAgY2hlY2tpbmcgc29mdHdhcmUgaGFwcHksIG5vdCBiZWNhdXNlIHRoZXJlCgl3YXMgYW4gYWN0dWFsIGJ1ZyAodGhlIGltcG9ydGFudCBtZW1vcnkgd2FzIGJlaW5nIGNsZWFyZWQgcHJvcGVybHkpLgoKMTk5OS0xMi0xNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdmFyaWFibGUuYyAocHJpbnRfdmFyaWFibGUpOiBQcmludCB0aGUgdmFyaWFibGUgd2l0aCArPSBpZiB0aGUKCWFwcGVuZCBmbGFnIGlzIHNldC4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogUmVtb3ZlIHRoZSBleHRyYSBjaGVjayBvZiB0aGUKCWltcGxpY2l0IGZsYWcgYWRkZWQgb24gOC8yNC8xOTk4LiAgVGhpcyBjYXVzZXMgcHJvYmxlbXMgYW5kIHRoZQoJcmVhc29uIGZvciB0aGUgY2hhbmdlIHdhcyBiZXR0ZXIgcmVzb2x2ZWQgYnkgdGhlIGNoYW5nZSBtYWRlIHRvCgljaGVja19kZXBzKCkgb24gOC8yNi8xOTk4LiAgVGhpcyBmaXhlcyBQUi8xNDIzLgoKMTk5OS0xMi0wOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZGlyLmMgKGRpcl9zZXR1cF9nbG9iKTogT24gNjQgYml0IFJlbGlhbnRVTklYICg1LjQ0IGFuZCBhYm92ZSkKCWluIExGUyBtb2RlLCBzdGF0KCkgaXMgYWN0dWFsbHkgYSBtYWNybyBmb3Igc3RhdDY0KCkuICBBc3NpZ25tZW50Cglkb2Vzbid0IHdvcmsgaW4gdGhhdCBjYXNlLiAgU28sIHN0YXQgaXMgYSBtYWNybywgbWFrZSBhIGxvY2FsCgl3cmFwcGVyIGZ1bmN0aW9uIHRvIGludm9rZSBpdC4KCShsb2NhbF9zdGF0KTogV3JhcHBlciBmdW5jdGlvbiwgaWYgbmVlZGVkLgoJUmVwb3J0ZWQgYnkgQW5kcmVqIEJvcnNlbmtvdyA8QW5kcmVqLkJvcnNlbmtvd0Btb3cuc2llbWVucy5ydT4uCgoxOTk5LTEyLTAyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGUpOiBNb3ZlIHRoZSBjb25zaWRlcmVkIHRlc3Qgb3V0c2lkZSB0aGUKCWRvdWJsZS1jb2xvbiBsb29wLCBfYnV0XyBtYWtlIHN1cmUgd2UgdGVzdCB0aGUgZG91YmxlX2NvbG9uIHRhcmdldAoJbm90IHRoZSAiY3VycmVudCIgdGFyZ2V0LiAgSWYgd2Ugc3RvcCBlYXJseSBiZWNhdXNlIG9uZQoJZG91YmxlLWNvbG9uIHRhcmdldCBpcyBydW5uaW5nLCBtYXJrIGFsbCB0aGUgcmVzdCBjb25zaWRlcmVkIGFuZAoJdHJ5IHRvIHN0YXJ0IHRoZWlyIHByZXJlcXVpc2l0ZXMgKHNvIHRoZXkncmUgbWFya2VkIGNvbnNpZGVyZWQpLgoJRml4IGZvciBQUi8xNDc2IHN1Z2dlc3RlZCBieSBUaW0gTWFnaWxsIDx0aW0ubWFnaWxsQHRlbG9wcy5ndGUuY29tPi4KCjE5OTktMTEtMjIgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQGRldi50aXZvbGkuY29tPgoKCSogZnVuY3Rpb24uYyAod2luZG93czMyX29wZW5waXBlLCBmdW5jX3NoZWxsKTogQ29ycmVjdCBXaW5kb3dzMzIKCXByb2JsZW0gd2hlcmUgJChzaGVsbCBub3N1Y2hmaWxlKSB3b3VsZCBpbmNvcnJlY3RseSBleGl0IG1ha2UuIFRoZQoJZml4IGlzIHRvIHByaW50IHRoZSBlcnJvciBhbmQgbGV0IG1ha2UgY29udGludWUuCglSZXBvcnRlZCBieSBEYXZpZCBNYXN0ZXJzb24gPERhdmlkLk1hc3RlcnNvbkBrbGEtdGVuY29yLmNvbT4uCgoJKiB3MzIvc3VicHJvYy9taXNjLmMgKGFycjJlbnZibGspOiBNZW1vcnkgbGVhayBmaXguCgoxOTk5LTExLTIxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJUmV3b3JrIEdOVSBtYWtlIGRlYnVnZ2luZyB0byBwcm92aWRlIGRpZmZlcmVudCBsZXZlbHMgb2Ygb3V0cHV0LgoKCSogTkVXUzogbWVudGlvbiBpdC4KCSogZGVidWcuaDogTmV3IGZpbGUuICBEZWZpbmUgdmFyaW91cyBkZWJ1Z2dpbmcgbGV2ZWxzIGFuZCBtYWNyb3MuCgkqIGZ1bmN0aW9uLmMsIGltcGxpY2l0LmMsIGpvYi5jLCBtYWluLmMsIG1pc2MuYywgcmVhZC5jLCByZW1ha2UuYwoJKiByZW1vdGUtY3N0bXMuYywgdm1zZnVuY3Rpb25zLmM6IFJlcGxhY2UgYWxsIGNvZGUgZGVwZW5kaW5nIG9uCglkZWJ1Z19mbGFnIHdpdGggaW52b2NhdGlvbnMgb2YgZGVidWdnaW5nIG1hY3Jvcy4KCSogbWFrZS5oOiBSZW1vdmUgZGVidWdfZmxhZyBhbmQgREVCVUdQUiwgYWRkIGRiX2xldmVsLgoKMTk5OS0xMS0xOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBhY2luY2x1ZGUubTQgKEFDX1NZU19MQVJHRUZJTEVfRkxBR1MpOiBXb3JrIGFyb3VuZCBhIHByb2JsZW0KCXdpdGggdGhlIFFOWCA0LjI1IHNoZWxsLCB3aGljaCBkb2Vzbid0IHByb3BhZ2F0ZSBleGl0IHN0YXR1cyBvZgoJZmFpbGVkIGNvbW1hbmRzIGluc2lkZSBzaGVsbCBhc3NpZ25tZW50cy4KCjE5OTktMTEtMTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfaWYpOiBGaW5kIHRoZSBlbmQgb2YgdGhlIGFyZyBsaXN0IGJ5IHRlc3RpbmcKCXRoZSBuZXh0IGl0ZW0gZm9yIE5VTEw7IGFueSBvdGhlciB0ZXN0IGlzIG5vdCBjb3JyZWN0LgoJUmVwb3J0ZWQgYnkgR3JhaGFtIFJlZWQgPGdyYWhhbXJAYWxnb3JpdGhtaWNzLmNvbT4gKFBSLzE0MjkpLgoKCUZpeCArPSB3aGVuIHVzZWQgaW4gYSB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUgY29udGV4dC4KCgkqIHZhcmlhYmxlLmg6IE5ldyBiaXRmaWVsZCBBUFBFTkQgc2V0IGlmIHdlIGhhdmUgYSArPQoJdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBBZGQgYW4gYXJndW1lbnQgdG8gc3BlY2lmeQoJaWYgd2UncmUgdHJ5aW5nIGEgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlLiAgSWYgd2UgYXJlIGFuZCBpdCdzIGFuCglhcHBlbmQgc3R5bGUsIGRvbid0IGFwcGVuZCBpdCwgcmVjb3JkIGl0IGFzIG5vcm1hbCByZWN1cnNpdmUsIGJ1dAoJc2V0IHRoZSBBUFBFTkQgZmxhZyBzbyBpdCdsbCBiZSBleHBhbmRlZCBsYXRlci4KCSogbWFpbi5jIChoYW5kbGVfbm9uX3N3aXRjaF9hcmd1bWVudCk6IFVzZSBuZXcKCXRyeV92YXJpYWJsZV9kZWZpbml0aW9uKCkgc2lnbmF0dXJlLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUscmVjb3JkX3RhcmdldF92YXIpOiBEaXR0by4KCgkqIGV4cGFuZC5jIChhbGxvY2F0ZWRfdmFyaWFibGVfYXBwZW5kKTogTmV3IGZ1bmN0aW9uOiBsaWtlCglhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kKCksIGJ1dCB3ZSBleHBhbmQgdGhlIHNhbWUgdmFyaWFibGUgbmFtZQoJaW4gdGhlIGNvbnRleHQgb2YgdGhlIGBgbmV4dCcnIHZhcmlhYmxlIHNldCwgdGhlbiB3ZSBhcHBlbmQgdGhpcwoJZXhwYW5kZWQgdmFsdWUuCgkocmVjdXJzaXZlbHlfZXhwYW5kKTogSW52b2tlIGl0LCBpZiB0aGUgQVBQRU5EIGJpdCBpcyBzZXQuCgoxOTk5LTExLTEwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmaWxlLmMgKHNuYXBfZGVwcyk6IElmIHRoZSAuTk9UUEFSQUxMRUwgdGFyZ2V0IGlzIGRlZmluZWQsIHR1cm4KCW9mZiBwYXJhbGxlbCBidWlsZHMgZm9yIHRoaXMgbWFrZSBvbmx5IChzdGlsbCBhbGxvdyBzdWJtYWtlcyB0byBiZQoJcnVuIGluIHBhcmFsbGVsKS4KCSogbWFpbi5jOiBOZXcgdmFyaWFibGUsIGBgbm90X3BhcmFsbGVsJycuCgkqIG1ha2UuaDogQWRkIGFuIGV4dGVybiBmb3IgaXQuCgkqIGpvYi5jIChuZXdfam9iKTogVGVzdCBOT1RfUEFSQUxMRUwgYXMgd2VsbCBhcyBKT0JfU0xPVFMuCgkqIE5FV1M6IEFkZCBpbmZvIG9uIC5OT1RQQVJBTExFTC4KCSogbWFrZS50ZXhpbmZvIChTcGVjaWFsIFRhcmdldHMpOiBEb2N1bWVudCBpdC4KCgkqIGNvbmZpZ3VyZS5pbiAoR0xPQkRJUik6IFNldCB0byAiZ2xvYiIgaWYgd2UgbmVlZCB0byBidWlsZCB0aGUKCWdsb2IgbGlicmFyeS4KCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBVc2UgdGhlIEdMT0JESVIgdmFyaWFibGUgaW5zdGVhZCBvZgoJImdsb2IiIHNvIHdlIGRvbid0IHRyeSB0byBidWlsZCBnbG9iIGlmIHdlIGRvbid0IG5lZWQgdG8gKGlmIHdlCgloYXZlIEdMSUJDIGdsb2IpLiAgUmVwb3J0ZWQgYnkgTGFycyBIZWNraW5nIDxsaGVja2luZ0BubXJjLnVjYy5pZT4uCgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBwdXQgIioqKiIgaW4gdGhlIGNsb2NrIHNrZXcgd2FybmluZwoJbWVzc2FnZS4gIFJlcG9ydGVkIGJ5IGthcmxAZ251Lm9yZy4KCgkqIG1ha2UuaDogUmVtb3ZlIHVubmVlZGVkIHNpZ25hbCBzZXR1cC4KCgkqIHNpZ25hbWUuYzogUmVtb3ZlIGV4dHJhbmVvdXMgI2luY2x1ZGVzOyBzb21lIHZlcnNpb25zIG9mIFVsdHJpeAoJZG9uJ3QgcHJvdGVjdCBhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbnMgYW5kIGl0IGNhdXNlcyBjb21waWxlCgllcnJvcnMuICBSZXBvcnRlZCBieSBTaW1vbiBCdXJnZSA8c2ltb25iQHRoaXN0bGVkb3duLmNvbS5hdT4uCgoxOTk5LTEwLTE1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKHF1b3RlX2Zvcl9lbnYpOiBSZW5hbWUgZnJvbSBxdW90ZV9hc193b3JkKCkuCgoJKiBtYWtlLmgsICouYzogUHJlZmVyIHN0cmNocigpIGFuZCBzdHJyY2hyKCkgaW4gdGhlIGNvZGUKCXJhdGhlciB0aGFuIGluZGV4KCkgYW5kIHJpbmRleCgpLiAgRGVmaW5lIHN0cmNoci9zdHJyY2hyIGluIHRlcm1zCglvZiBpbmRleC9yaW5kZXggaWYgdGhlIGZvcm1lciBhcmVuJ3Qgc3VwcG9ydGVkLgoKCSogZGVmYXVsdC5jIChDSEVDS09VVCx2KTogUmVwbGFjZSB0aGUgZmFuY3ksIGNvbXBsaWNhdGVkCglwYXRzdWJzdC9maWx0ZXIgZXhwcmVzc2lvbiB3aXRoIGEgc2ltcGxlICQoaWYgLi4uKSBleHByZXNzaW9uLgoKCSogbWFpbi5jIChwcmludF91c2FnZSk6IEFkZCB0aGUgYnVnIHJlcG9ydGluZyBtYWlsaW5nIGFkZHJlc3MgdG8KCXRoZSAtLWhlbHAgb3V0cHV0LCBhcyBwZXIgdGhlIEdOVSBjb2Rpbmcgc3RhbmRhcmRzLgoJUmVwb3J0ZWQgYnkgUGF1bCBFZ2dlcnQgPGVnZ2VydEB0d2luc3VuLmNvbT4uCgoJKiBSRUFETUUuY3VzdG9tczogSW5zdGFsbGVkIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgQ3VzdG9tcy1pemVkCglHTlUgbWFrZSBhbmQgc2V0dWlkIHJvb3QsIGNvbGxlY3RlZCBieSBUZWQgU3Rlcm4gPHN0ZXJuQHRlcmEuY29tPi4KCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogUFIvMTM5NDogTWFyayB0aGUgZW5kIG9mIHRoZSBuZXh0Cgl0b2tlbiBpbiB0aGUgTUFLRUZJTEVTIHZhbHVlIHN0cmluZyBfYmVmb3JlXyB3ZSBkdXAgaXQuCgoxOTk5LTEwLTEzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW4gKG1ha2VfY3Zfc3lzX2dudV9nbG9iKTogV2UgdXNlZCB0byBhZGQgdGhlIC1JZ2xvYgoJZmxhZyB0byBDUFBGTEFHUywgYnV0IHRoYXQgbG9zZXMgaWYgdGhlIHVzZXIgc3BlY2lmaWVzIGhpcyBvd24KCUNQUEZMQUdTOyB0aGlzIG9uZSBnZXRzIGFkZGVkIF9hZnRlcl8gaGlzIGFuZCBpZiBoZSBoYXBwZW5zIHRvCgloYXZlIGFuIG9sZCBvciBicm9rZW4gZ2xvYi5oLS1ib29tLiAgSW5zdGVhZCwgcHV0IGl0IGluIEdMT0JJTkMKCWFuZCBTVUJTVCBpdC4KCgkqIE1ha2VmaWxlLmFtIChJTkNMVURFUyk6IEFkZCBAR0xPQklOQ0AgdG8gdGhlIElOQ0xVREVTIG1hY3JvOwoJdGhlc2UgdGhpbmdzIGdldCBvbiB0aGUgY29tcGlsZSBsaW5lIHdlbGwgYmVmb3JlIHRoZSB1c2VyJ3MKCUNQUEZMQUdTLgoKMTk5OS0xMC0xMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogSWYgd2UgZ2V0IGhlcmUgYW5kIC1uIGlzIHNldCwKCXNlZSBpZiBhbGwgdGhlIGNvbW1hbmQgbGluZXMgYXJlIG1hcmtlZCByZWN1cnNpdmUuICBJZiBzbywgdGhlbiB3ZQoJcmFuIGV2ZXJ5IGNvbW1hbmQgdGhlcmUgaXMsIHNvIGNoZWNrIHRoZSBtdGltZSBvbiB0aGlzIGZpbGUganVzdAoJbGlrZSB3ZSB3b3VsZCBub3JtYWxseS4gIElmIG5vdCwgd2UgYXNzdW1lIHRoZSBjb21tYW5kIHdlIGRpZG4ndAoJcnVuIHdvdWxkIHVwZGF0ZXMgdGhlIHRhcmdldCBhbmQgc2V0IG10aW1lIG9mIHRoZSB0YXJnZXQgdG8gInZlcnkgbmV3Ii4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFVwZGF0ZSBsaW5lc19mbGFncyBpbiB0aGUgZmlsZSdzIGNtZHMKCXN0cnVjdHVyZSB3aXRoIGFueSBwZXItbGluZSB0b2tlbnMgd2UgZm91bmQgKGBAJywgYC0nLCBgKycpLgoKMTk5OS0xMC0wOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdmFyaWFibGUuYyAoaW5pdGlhbGl6ZV9maWxlX3ZhcmlhYmxlcyk6IEFsd2F5cyByZWN1cnNlIHRvCglpbml0aWFsaXplIHRoZSBwYXJlbnQncyBmaWxlIHZhcmlhYmxlczogdGhlIHBhcmVudCBtaWdodCBub3QgaGF2ZQoJYW55IHJ1bGVzIHRvIHJ1biBzbyBpdCBtaWdodCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIGJlZm9yZQoJdGhpcy0td2UgbmVlZCB0aGlzIHRvIHNldCB1cCB0aGUgY2hhaW4gcHJvcGVybHkgZm9yCgl0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGVzLgoKMTk5OS0wOS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBtYWluLmMgKHF1b3RlX2FzX3dvcmQpOiBBbHdheXMgcXVvdGUgZm9yIGRlY29kZV9lbnZfc3dpdGNoZXMKICAgICAgICBpbnN0ZWFkIG9mIGZvciB0aGUgc2hlbGwsIHNvIHRoYXQgYXJndW1lbnRzIHdpdGggc3RyYW5nZQogICAgICAgIGNoYXJhY3RlcnMgYXJlIGFyZSBwYXNzZWQgdG8gc3VibWFrZXMgY29ycmVjdGx5LiAgUmVtb3ZlCiAgICAgICAgZG91YmxlX2RvbGxhcnMgYXJnOyB3ZSBhbHdheXMgZG91YmxlIGRvbGxhcnMgbm93LiAgQWxsIGNhbGxlcnMKICAgICAgICBjaGFuZ2VkLgogICAgICAgIChkZWNvZGVfZW52X3N3aXRjaGVzKTogRG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGFuIGVudmlyb25tZW50CiAgICAgICAgdmFyaWFibGUgd2hvc2UgY29udGVudHMgZW5kcyBpbiBhIHVuZXNjYXBlZCBiYWNrc2xhc2guCgoxOTk5LTA5LTIzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb21tYW5kcy5jLCBmdW5jdGlvbi5jLCBqb2IuYywgcmVhZC5jOiBDYXN0IGFyZ3VtZW50cyB0bwoJY3R5cGUuaCBmdW5jdGlvbnMvbWFjcm9zIHRvIF91bnNpZ25lZF8gY2hhciBmb3IgcG9ydGFiaWxpdHkuCgoJKiByZW1ha2UuYywgZnVuY3Rpb24uYzogQ29tcGlsZXIgd2FybmluZyBmaXhlczogdGhlIHNlY29uZAoJYXJndW1lbnQgdG8gZmluZF9uZXh0X3Rva2VuKCkgc2hvdWxkIGJlIGFuIF91bnNpZ25lZF8gaW50Ki4KCVJlcG9ydGVkIGJ5IEhhbi1XZW4gTmllbmh1eXMgPGhhbndlbkBjcy51dS5ubD4uCgoxOTk5LTA5LTIzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzguMSByZWxlYXNlZC4KCgkqIG1ha2UudGV4aW5mbzogVXBkYXRlIHZlcnNpb24vZGF0ZSBzdGFtcC4KCgkqIG1haW4uYyAobWFpbik6IEFyZ2guICBGb3Igc29tZSByZWFzb24gd2Ugd2VyZSBjbG9zaW5nIF9hbGxfIHRoZQoJam9ic2VydmVyIHBpcGVzIGJlZm9yZSB3ZSByZS1leGVjJ2QgZHVlIHRvIGNoYW5nZWQgbWFrZWZpbGVzLgoJVGhpcyBtZWFucyB0aGF0IGFueSByZS1leGVjIGdvdCBhICJqb2JzZXJ2ZXIgdW5hdmFpbGFibGUiIGVycm9yIDotLy4KCUkgY2FuJ3QgYmVsaWV2ZSB3ZSBkaWRuJ3Qgbm90aWNlIHRoaXMgYmVmb3JlLgoKMTk5OS0wOS0yMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc4IHJlbGVhc2VkLgoKCSogbWFpbi5jIChtYWluKTogT25seSBmYWlsIG9uIG11bHRpcGxlIC0tam9ic2VydmVyLWZkcyBvcHRpb25zIGlmCgl0aGV5IGFyZW4ndCBhbGwgdGhlIHNhbWUuICBTb21lIG1ha2VmaWxlcyB1c2UgdGhpbmdzIGxpa2UKCSQoTUFLRSkgJChNRkxBR1MpIHdoaWNoIHdpbGwgY2F1c2UgbXVsdGlwbGUsIGlkZW50aWNhbCBjb3BpZXMgb2YKCS0tam9ic2VydmVyLWZkcyB0byBzaG93IHVwLgoKMTk5OS0wOS0xNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogWmVybyBvdXQgRkxBR1NUUklORyB0byBhdm9pZAoJdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgd2hlbiBjaGVja2luZyAqcCAhPSAnLScgaW4gdGhlIGxvb3AuCgoxOTk5LTA5LTE1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzcuOTcgcmVsZWFzZWQuCgoJKiBjb25maWd1cmUuaW4gKE1BS0VfSE9TVCk6IEFDX1NVQlNUIHRoaXMgc28gaXQgd2lsbCBnbyBpbnRvIHRoZQoJbWFrZWZpbGUuCgkqIE1ha2VmaWxlLmFtIChjaGVjay1sb2NhbCk6IFByaW50IGEgc3VjY2VzcyBiYW5uZXIgaWYgdGhlIGNoZWNrCglzdWNjZWVkcy4KCShjaGVjay1yZWdyZXNzaW9uKTogQSBiaXQgb2YgZmluZS10dW5pbmcuCgoxOTk5LTA5LTE1ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogUkVBRE1FLkRPUy50ZW1wbGF0ZTogRG9jdW1lbnQgcmVxdWlyZW1lbnRzIGZvciB0aGUgdGVzdCBzdWl0ZS4KCSogTWFrZWZpbGUuRE9TLnRlbXBsYXRlOiBVcGRhdGVzIHRvIGFsbG93IHRoZSB0ZXN0IHN1aXRlIHRvIHJ1bgoJZnJvbSAibWFrZSBjaGVjayIuCgoJKiBtYWluLmMgKG1haW4pOiBIYW5kbGUgaXQgaWYgYXJndlswXSBpc24ndCBhbiBhYnNvbHV0ZSBwYXRoLgoKMTk5OS0wOS0xMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc3Ljk2IHJlbGVhc2VkLgoKCSogTWFrZWZpbGUuYW0gKGxvYWRhdmcpOiBVc2UgQ1BQRkxBR1MsIGV0Yy4gdG8gbWFrZSBzdXJlIHdlIGdldAoJYWxsIHRoZSByaWdodCAjZGVmaW5lcyB0byBjb21waWxlLgoJKGNoZWNrLXJlZ3Jlc3Npb24pOiBMb29rIGZvciB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlIGluIHRoZSBtYWtlCglwYWNrYWdlIGl0c2VsZi4gIElmIHdlJ3JlIGJ1aWxkaW5nIHJlbW90ZWx5LCB1c2Ugc3ltbGlua3MgdG8gbWFrZQoJYSBsb2NhbCBjb3B5LgoJKGRpc3QtaG9vayk6IFB1dCB0aGUgdGVzdCBzdWl0ZSBpbnRvIHRoZSB0YXIgZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgcGVybCBmb3IgdGhlIHRlc3Qgc3VpdGUuCgoxOTk5LTA5LTEwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCiAgICAgICAgKiBhY2luY2x1ZGUubTQgKEFDX1NZU19MQVJHRUZJTEVfRkxBR1MpOiBJZiBvbiBIUC1VWCAxMC4yMCBvcgogICAgICAgIGxhdGVyLCBhbmQgdXNpbmcgR0NDLCBkZWZpbmUgX19TVERDX0VYVF9fOyB0aGlzIHdvcmtzIGFyb3VuZCBhCiAgICAgICAgYnVnIGluIEdDQyAyLjk1LjEuCgoxOTk5LTA5LTA4ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBVZ2guICBHTElCQydzIGNvbmZpZ3VyZSB0cmllcyB0byBjaGVjawoJbWFrZSB2ZXJzaW9uIHN0cmluZ3MgYW5kIGlzIHRvbyBhZ2dyZXNzaXZlIHdpdGggdGhlaXIgbWF0Y2hpbmcKCWV4cHJlc3Npb25zLiAgSSd2ZSBzdHJ1Y2sgYSBkZWFsIHdpdGggdGhlbSB0byBsZWF2ZSB0aGUgdmVyc2lvbgoJb3V0cHV0IGFzLWlzIGZvciAzLjc4LCBhbmQgdGhleSdsbCBjaGFuZ2UgdGhlaXIgY29uZmlndXJlIGNoZWNrcwoJc28gdGhhdCBJIGNhbiBjaGFuZ2UgdGhpcyBiYWNrIGluIHRoZSBmdXR1cmUuCgoxOTk5LTA5LTA3ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtfX01TRE9TX19dOiBBZGQgImVjaG8iCglhbmQgInVuc2V0IiB0byB0aGUgbGlzdCBvZiBidWlsdGluIHNoZWxsIGNvbW1hbmRzLgoKCSogY29uZmlnaC5ET1MudGVtcGxhdGUgKE1BS0VfSE9TVCk6IERlZmluZSB0byAiaTM4Ni1wYy1tc2Rvc2RqZ3BwIgoJd2hpY2ggaXMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSBESkdQUCBob3N0LgoKMTk5OS0wOS0wNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc3Ljk1IHJlbGVhc2VkLgoKCSogbWFrZS50ZXhpbmZvIChNYWtlIEVycm9ycyk6IERvY3VtZW50IHNvbWUgbmV3IGpvYnNlcnZlciBlcnJvcgoJbWVzc2FnZXMuCgoxOTk5LTA5LTA0ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFrZS50ZXhpbmZvIChNYWtlIEVycm9ycyk6IERvY3VtZW50IHRoZSBoaW50IGFib3V0IDggc3BhY2VzCglpbnN0ZWFkIG9mIGEgVEFCLgoJKENhbGwgRnVuY3Rpb24sIFF1aWNrIFJlZmVyZW5jZSk6IFVzZSBAY29kZXskKDEpfSwgbm90IEB2YXIuCgoJKiBtYWluLmMgKG1haW4pIFtfX01TRE9TX19dOiBTYXkgIm9uIHRoaXMgcGxhdGZvcm0iIGluc3RlYWQgb2YgIm9uCglNUy1ET1MiLCBzaW5jZSB0aGUgTVNET1MgdmVyc2lvbiBjb3VsZCBydW4gb24gV2luZG93cy4KCjE5OTktMDktMDMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IEFsd2F5cyBzZXQgbXRpbWVfYmVmb3JlX3VwZGF0ZQoJaWYgaXQncyBub3QgYmVlbiBzZXQsIG5vdCBqdXN0IGlmIHdlIHJhbiBzb21lIHJ1bGVzLiAgT3RoZXJ3aXNlIHdlCgltYXkgaGF2ZSBhIHNpdHVhdGlvbiB3aGVyZSBhIHRhcmdldCdzIHByZXJlcXVpc2l0ZSB3YXMgcmVidWlsdCBidXQKCW5vdCBjaGFuZ2VkLCBzbyB0aGlzIHRhcmdldCdzIHJ1bGVzIHdlcmVuJ3QgcnVuLCB0aGVuCgl1cGRhdGVfZ29hbF9jaGFpbigpIHNlZXMgbXRpbWVfYmVmb3JlX3VwZGF0ZSAhPSBsYXN0X210aW1lIGFuZAoJdGhpbmtzIHRoYXQgdGhlIHRvcC1sZXZlbCB0YXJnZXQgY2hhbmdlZCB3aGVuIGl0IHJlYWxseSBkaWRuJ3QuCglUaGlzIGNhbiBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIHdoZW4gcmVtYWtpbmcgbWFrZWZpbGVzLgoJKHVwZGF0ZV9nb2FsX2NoYWluKTogSWYgd2UgZ2V0IGJhY2sgdG8gdGhlIHRvcCBhbmQgd2UgZG9uJ3Qga25vdwoJd2hhdCB0aGUgZ29hbCdzIGxhc3RfbXRpbWUgd2FzLCBmaW5kIGl0IG5vdy4gIFdlIG5lZWQgdG8ga25vdyBzbwoJd2UgY2FuIGNvbXBhcmUgaXQgdG8gbXRpbWVfYmVmb3JlX3VwZGF0ZSBsYXRlciAodGhpcyBpcyBvbmx5CgljcnVjaWFsIHdoZW4gcmVtYWtpbmcgbWFrZWZpbGVzLS1zaG91bGQgd2Ugb25seSBkbyBpdCB0aGVuPykKCjE5OTktMDktMDIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElmICJvdmVycmlkZSIgYXBwZWFycyBhcyB0aGUgZmlyc3QKCXByZXJlcXVpc2l0ZSwgbG9vayBmdXJ0aGVyIHRvIGVuc3VyZSB0aGlzIGlzIHJlYWxseSBhCgl0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUgZGVmaW5pdGlvbiwgYW5kIG5vdCBqdXN0IHNvbWUKCXByZXJlcXVpc2l0ZSBuYW1lZCAib3ZlcnJpZGUiLgoKMTk5OS0wOS0wMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZnVuY3Rpb24uYyAoSVNfUEFUSFNFUCkgW1dJTkRPV1MzMl06IEFsbG93IGJhY2tzbGFzaCBzZXBhcmF0b3JzCglmb3IgVzMyIHBsYXRmb3Jtcy4KCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpIFtXSU5ET1dTMzJdOiBBbGxvdyBiYWNrc2xhc2ggc2VwYXJhdG9ycwoJZm9yIFczMiBwbGF0Zm9ybXMuCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKSBbV0lORE9XUzMyXTogQWxsb3cgYmFja3NsYXNoCglzZXBhcmF0b3JzIGZvciBXMzIgcGxhdGZvcm1zLgoKCSogY29uZmlndXJlLmluIChNQUtFX0hPU1QpOiBEZWZpbmUgaXQgdG8gYmUgdGhlIGNhbm9uaWNhbCBidWlsZAoJaG9zdCBpbmZvLCBub3cgdGhhdCB3ZSBuZWVkIEFDX0NBTk9OSUNBTF9IT1NUIGFueXdheSAoZm9yIGxhcmdlCglmaWxlIHN1cHBvcnQpLgoJKiB2ZXJzaW9uLmMgKG1ha2VfaG9zdCk6IERlZmluZSBhIHZhcmlhYmxlIHRvIE1BS0VfSE9TVCBzbyB3ZSdyZQoJc3VyZSB0byBnZXQgaXQgZnJvbSB0aGUgbG9jYWwgY29uZmlnLmguCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IFVzZSBpdCBpbiB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbi4KCSogY29uZmlnLmFtaS50ZW1wbGF0ZTogQWRkIE1BS0VfSE9TVC4KCSogY29uZmlnaC5kb3MudGVtcGxhdGU6IERpdHRvLgoJKiBjb25maWcuaC5XMzIudGVtcGxhdGU6IERpdHRvLgoJKiBjb25maWcuaC12bXMudGVtcGxhdGU6IERpdHRvLgoKCSogbWFpbi5jIChtYWluKTogQ2xvc2UgdGhlIGpvYnNlcnZlciBmaWxlIGRlc2NyaXB0b3JzIGlmIHdlIG5lZWQKCXRvIHJlLWV4ZWMgb3Vyc2VsdmVzLgoJQWxzbyBwcmludCBtb3JlIHJlYXNvbmFibGUgZXJyb3IgaWYgdXNlcnMgZm9yY2UgLWpOIGZvciBzdWJtYWtlcy4KCVRoaXMgbWF5IGJlIGNvbW1vbiBmb3IgYSB3aGlsZSB1bnRpbCBwZW9wbGUgdXNlIHRoZSBqb2JzZXJ2ZXIKCWZlYXR1cmUuICBJZiBpdCBoYXBwZW5zLCB3ZSBpZ25vcmUgdGhlIGV4aXN0aW5nIGpvYnNlcnZlciBzdHVmZgoJYW5kIHVzZSB3aGF0ZXZlciB0aGV5IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuCgkoZGVmaW5lX21ha2VmbGFncyk6IEZpeGVkIGEgbG9uZy1zdGFuZGluZyBidWc6IGlmIGEgbG9uZyBuYW1lCglvbmx5IG9wdGlvbiBjb21lcyBpbW1lZGlhdGVseSBhZnRlciBhIHNpbmdsZSBsZXR0ZXIgb3B0aW9uIHdpdGggbm8KCWFyZ3VtZW50LCB0aGVuIHRoZSBvcHRpb24gc3RyaW5nIGlzIGNvbnN0cnVjdGVkIGluY29ycmVjdGx5LiAgRm9yCglleGFtcGxlLCB3aXRoIC13IGFuZCAtLWpvYnNlcnZlci1mZHMgeW91IGdldCAiLXctam9ic2VydmVyLWZkcy4uLiIKCWluc3RlYWQgb2YgIi13IC0tam9ic2VydmVyLWZkcy4uLiI7IGFkZCBpbiBhbiBleHRyYSAiIC0iLgoKCSogbWFrZS50ZXhpbmZvIChQaG9ueSBUYXJnZXRzKTogQWRkIGFub3RoZXIgZXhhbXBsZSBvZiB1c2luZwoJLlBIT05ZIHdpdGggc3ViZGlyZWN0b3JpZXMvcmVjdXJzaXZlIG1ha2UuCgoxOTk5LTA4LTMwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBSRUFETUUuVzMyLnRlbXBsYXRlOiBSZW5hbWVkIGZyb20gUkVBRE1FLlczMiBzbyBpdCdzCglhdXRvZ2VuZXJhdGVkIGR1cmluZyB0aGUgZGlzdC4gIEEgZmV3IG1pbm9yIG1vZGlmaWNhdGlvbnMuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBrc3RhdF9vcGVuIGJlZm9yZSBBQ19GVU5DX0dFVExPQURBVkcKCXNpbmNlIHRoZSBsYXR0ZXIgbmVlZHMgdG8ga25vdyB3aGV0aGVyIHRoZSBmb3JtZXIgZXhpc3RzIHRvIGdpdmUKCWFuIGFjY3VyYXRlIHJlc3VsdC4KCjE5OTktMDgtMjYgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQGRldi50aXZvbGkuY29tPgoKCSogTk1ha2VmaWxlIFtXSU5ET1dTMzJdOiBOb3cgbW9yZSByb2J1c3QuIElmIHlvdSBjaGFuZ2UgYSBmaWxlCgl1bmRlciB3MzIvc3VicHJvYywgdGhlIG1ha2UuZXhlIHdpbGwgYmUgcmVsaW5rZWQuIEFsc28gYWRkZWQgc29tZQoJdGVzdHMgdG8gbWFrZSBzdXJlIGVyYXNlIGNvbW1hbmRzIHdvbid0IGZhaWwgd2hlbiBleGVjdXRlZCBpbiBhCglwcmlzdGluZSBidWlsZCBlbnZpcm9ubWVudC4KCgkqIHczMi9zdWJwcm9jL3N1Yl9wcm9jLmMgW1dJTkRPV1MzMl06IEFkZGVkIHN1cHBvcnQgZm9yCglIQVZFX0NZR1dJTl9TSEVMTC4gSWYgeW91IGFyZSB1c2luZyB0aGUgQ3lnd2luIEIyMC4xIHJlbGVhc2UsIGl0CglpcyBub3cgcG9zc2libGUgdG8gaGF2ZSBoYXZlIG5hdGl2ZSBzdXBwb3J0IGZvciB0aGlzIHNoZWxsIHdpdGhvdXQKCWhhdmluZyB0byByZWx5IG9uIGtsdXR6eSBCQVRDSF9NT0RFX09OTFlfU0hFTEwuCgoJKiBjb25maWcuaC5XMzIgW1dJTkRPV1MzMl06IEFkZGVkIEhBVkVfQ1lHV0lOX1NIRUxMIG1hY3JvIHdoaWNoCgl1c2VycyBjYW4gZGVmaW5lIGlmIHRoZXkgd2FudCB0byBidWlsZCBtYWtlIHRvIHVzZSB0aGlzIHNoZWxsLgoKCSogUkVBRE1FLlczMiBbV0lORE9XUzMyXTogQWRkZWQgaW5mb3JtYXRvbiBhYm91dAoJSEFWRV9DWUdXSU5fU0hFTEwuIENsZWFuZWQgdXAgdGV4dCBhIGJpdCB0byBtYWtlIGl0IG1vcmUgY3VycmVudC4KCjE5OTktMDgtMjYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCVN1cHBvcnQgbGFyZ2UgZmlsZXMgaW4gQUlYLCBIUC1VWCwgYW5kIElSSVguCgoJKiBhY2luY2x1ZGUubTQgKEFDX0xGUyk6IFJlbW92ZS4gIFN1cGVyc2VkZWQgYnkgQUNfU1lTX0xBUkdFRklMRS4KCShBQ19TWVNfTEFSR0VGSUxFX0ZMQUdTLCBBQ19TWVNfTEFSR0VGSUxFX1NQQUNFX0FQUEVORCwKCUFDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUsIEFDX1NZU19MQVJHRUZJTEUpOiBOZXcgbWFjcm9zLgoJKGptX0FDX1RZUEVfVUlOVE1BWF9UKTogQ2hlY2sgZm9yIGJ1c3RlZCBjb21waWxlcnMgdGhhdCBjYW4ndAoJc2hpZnQgb3IgZGl2aWRlIHVuc2lnbmVkIGxvbmcgbG9uZy4KCShBTV9QUk9HX0NDX1NUREMpOiBOZXcgbWFjcm87IGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgb2YgYSBidWcgaW4KCWF1dG9tYWtlIDEuNC4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0FOT05JQ0FMX0hPU1QpOiBBZGQ7IHJlcXVpcmVkIGJ5IG5ldwoJQUNfU1lTX0xBUkdFRklMRS4KCShBQ19TWVNfTEFSR0VGSUxFKTogUmVuYW1lZCBmcm9tIEFDX0xGUy4KCShBTV9QUk9HX0NDX1NUREMpOiBBZGQuCgoJKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWI6IE5ldyBmaWxlcywgbmVlZGVkIGZvciBBQ19DQU5PTklDQUxfSE9TVC4KCjE5OTktMDgtMjUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogbWFrZS5oIChDSEFSX01BWCk6IE5ldyBtYWNyby4KCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gpOiBjIGlzIG5vdyBpbnQsCglzbyB0aGF0IGl0IGNhbiBzdG9yZSB2YWx1ZXMgZ3JlYXRlciB0aGFuIENIQVJfTUFYLgoJKHN3aXRjaGVzKTogUmVwbGFjZSBzbWFsbCBudW1iZXJzIE4gd2l0aCBDSEFSX01BWCtOLTEsCgl0byBhdm9pZCBwcm9ibGVtcyB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXIgc2V0cy4KCShzaG9ydF9vcHRpb24pOiBOZXcgbWFjcm8uCgkoaW5pdF9zd2l0Y2hlcywgcHJpbnRfdXNhZ2UsIGRlZmluZV9tYWtlZmxhZ3MpOiBVc2UgaXQgaW5zdGVhZCBvZgoJaXNhbG51bS4KCjE5OTktMDgtMjUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ny45NCByZWxlYXNlZC4KCgkqIG1haW4uYyAobWFpbikgW19fTVNET1NfX106IElmIHRoZSB1c2VyIHVzZXMgLWosIHdhcm4gdGhhdCBpdCdzCglub3Qgc3VwcG9ydGVkIGFuZCByZXNldCBpdC4KCgkqIG1ha2UuaCAoSVNESUdJVCk6IE9idGFpbmVkIHRoaXMgZnJvbSB0aGUgdGV4dHV0aWxzIGRpc3RyaWJ1dGlvbi4KCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBVc2UgaXQuCgkqIGZ1bmN0aW9uLmMgKGlzX251bWVyaWMpOiBVc2UgaXQuCgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaCk6IFN0b3JlIHRoZSBzd2l0Y2ggY2hhciBpbiBhbgoJdW5zaWduZWQgY2hhciB0byBzaHV0IHVwIEdDQyBhYm91dCB1c2luZyBpdCB3aXRoIGN0eXBlLmggbWFjcm9zLgoJQmVzaWRlcywgaXQgX2lzXyBhbHdheXMgdW5zaWduZWQuCgoxOTk5LTA4LTI0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm86IENoYW5nZSAiZGVwZW5kZW5jeSIgdG8gInByZXJlcXVpc2l0ZSIgYW5kCgkiZGVwZW5kZW5jaWVzIiB0byAicHJlcmVxdWlzaXRlcyIuICBWYXJpb3VzIG90aGVyIGNsZWFudXBzIHJlbGF0ZWQKCXRvIHRoZSB0ZXJtaW5vbG9neSBjaGFuZ2UuCgkqIGZpbGUuYzogQ2hhbmdlIGRlYnVnZ2luZyBhbmQgZXJyb3IgbWVzc2FnZXMgdG8gdXNlCgkicHJlcmVxdWlzaXRlIiBpbnN0ZWFkIG9mICJkZXBlbmRlbmN5Ii4KCSogaW1wbGljaXQuYzogRGl0dG8uCgkqIHJlbWFrZS5jOiBEaXR0by4KCSogTkVXUzogRG9jdW1lbnQgaXQuCgoxOTk5LTA4LTIzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGUpOiBNb3ZlIHRoZSBjb25zaWRlcmVkIGNoZWNrIGludG8gdGhlCglkb3VibGUtY29sb24gcnVsZSBsb29wLCBzbyB3ZSBjb25zaWRlciBkb3VibGUtY29sb24gcnVsZXMKCWluZGl2aWR1YWxseSAob3RoZXJ3aXNlIGFmdGVyIHRoZSBmaXJzdCBpcyBwcnVuZWQsIHRoZSByZXN0IHdvbid0CglnZXQgcnVuKS4KCgkqIFJFQURNRS50ZW1wbGF0ZTogTWlub3IgY2hhbmdlcy4KCglSZW1vdmUgdGhlIGRlYnVnZ2luZyBmZWF0dXJlcyBvZiB0aGUgam9ic2VydmVyLCBzbyBpdCBubyBsb25nZXIKCXdyaXRlcyBkaXN0aW5jdCB0b2tlbnMgdG8gdGhlIHBpcGUuICBUaHVzLCB3ZSBkb24ndCBuZWVkIHRvIHN0b3JlCgl0aGUgdG9rZW4gd2UgZ2V0LiAgQSBzaWRlIGVmZmVjdCBvZiB0aGlzIGlzIHRvIHJlbW92ZSBhIHBvdGVudGlhbAoJInVuYXZhaWxhYmxlIHRva2VuIiBzaXR1YXRpb246IG1ha2UtMSBpbnZva2VzIG1ha2UtMiB3aXRoIGl0cwoJc3BlY2lhbCB0b2tlbiBhbmQgbWFrZS0zIHdpdGggYSBub3JtYWwgdG9rZW47IG1ha2UtMiBjb21wbGV0ZXMuCglOb3cgd2UncmUgd2FpdGluZyBmb3IgbWFrZS0zIGJ1dCB1c2luZyAyIHRva2Vuczsgb3VyIHNwZWNpYWwgdG9rZW4KCWlzIGlkbGUuICBJbiB0aGUgbmV3IHZlcnNpb24gd2UgZG9uJ3QgaGF2ZSBzcGVjaWFsIHRva2VucyBwZXIgc2UsCgl3ZSBtZXJlbHkgZGVjaWRlIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNoaWxkIG9yIG5vdC4gIElmIHdlIGRvbid0LAoJd2UgZG9uJ3QgbmVlZCBhIHRva2VuLiAgSWYgd2UgZG8sIHdlIGhhdmUgdG8gZ2V0IG9uZSB0byBydW4gdGhlCgluZXh0IGNoaWxkLiAgU2ltaWxhciBmb3IgcHV0dGluZyB0b2tlbnMgYmFjazogaWYgd2UncmUgY2xlYW5pbmcgdXAKCXRoZSBsYXN0IGNoaWxkLCB3ZSBkb24ndCBwdXQgYSB0b2tlbiBiYWNrLiAgT3RoZXJ3aXNlLCB3ZSBkby4KCgkqIG1haW4uYzogQWRkIGEgbmV3LCBpbnRlcm5hbCBmbGFnIC0tam9ic2VydmVyLWZkcyBpbnN0ZWFkIG9mCglvdmVybG9hZGluZyB0aGUgbWVhbmluZyBvZiAtai4gIFJlbW92ZSBqb2Jfc2xvdHNfc3RyIGFuZCBhZGQgdGhlCglzdHJpbmdsaXN0IGpvYnNlcnZlcl9mZHMuCgkoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogV2UgZG9uJ3QgbmVlZCB0aGUgaW50X3N0cmluZyB0eXBlLgoJKHN3aXRjaGVzW10pOiBBZGQgYSBuZXcgb3B0aW9uIGZvciAtLWpvYnNlcnZlci1mZHMgYW5kIHJlbW92ZQoJY29uZGl0aW9ucyBhcm91bmQgLWouICBNYWtlIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGZvcm1lciAwIHNvIGl0Cglkb2Vzbid0IHByaW50IGR1cmluZyAibWFrZSAtLWhlbHAiLgoJKG1haW4pOiBSZXdvcmsgam9ic2VydmVyIHBhcnNpbmcuICBJZiB3ZSBnb3QgLS1qb2JzZXJ2ZXItZmRzCgltYWtlIHN1cmUgaXQncyB2YWxpZC4gIFdlIG9ubHkgZ2V0IG9uZSBhbmQgam9iX3Nsb3RzIG11c3QgYmUgMC4KCUlmIHdlJ3JlIHRoZSB0b3BsZXZlbCBtYWtlICgtak4gd2l0aG91dCAtLWpvYnNlcnZlci1mZHMpIGNyZWF0ZQoJdGhlIHBpcGUgYW5kIHdyaXRlIGdlbmVyaWMgdG9rZW5zLgoJQ3JlYXRlIHRoZSBzdHJpbmdsaXN0IHN0cnVjdCBmb3IgdGhlIHN1Ym1ha2VzLgoJQ2xlYW4gdXAgdGhlIHN0cmluZ2xpc3Qgd2hlcmUgbmVjZXNzYXJ5LgoJKGluaXRfc3dpdGNoZXMpOiBSZW1vdmUgaW50X3N0cmluZyBoYW5kbGluZy4KCShwcmludF91c2FnZSk6IERvbid0IHByaW50IGludGVybmFsIGZsYWdzIChkZXNjcmlwdGlvbiBwdHIgaXMgMCkuCgkoZGVjb2RlX3N3aXRjaGVzKTogUmVtb3ZlIGludF9zdHJpbmcgaGFuZGxpbmcuCgkoZGVmaW5lX21ha2VmbGFncyk6IFJlbW92ZSBpbnRfc3RyaW5nIGhhbmRsaW5nLgoKCSogam9iLmM6IFJlbW92ZSBteV9qb2JfdG9rZW4gZmxhZyBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlCgljaGlsZC0+am9iX3Rva2VuIGZpZWxkLgoJKGZyZWVfam9iX3Rva2VuKTogUmVtb3ZlIHRoaXMgYW5kIG1lcmdlIGl0IGludG8gZnJlZV9jaGlsZCgpLgoJKHJlYXBfY2hpbGRyZW4pOiBSZXdvcmsgdGhlICJyZWFwZWQgYSBjaGlsZCIgbG9naWMgc2xpZ2h0bHkuCglEb24ndCBjYWxsIGRlZnVuY3QgZnJlZV9qb2JfdG9rZW4gYW55bW9yZS4gIEFsd2F5cyBjYWxsCglmcmVlX2NoaWxkLCBldmVuIGlmIHdlJ3JlIGR5aW5nLgoJKGZyZWVfY2hpbGQpOiBJZiB3ZSdyZSBub3QgZnJlZWluZyB0aGUgb25seSBjaGlsZCwgcHV0IGEgdG9rZW4KCWJhY2sgaW4gdGhlIHBpcGUuICBUaGVuLCBpZiB3ZSdyZSBkeWluZywgZG9uJ3QgYm90aGVyIHRvIGZyZWUuCgkobmV3X2pvYik6IElmIHdlIGFyZSB1c2luZyB0aGUgam9ic2VydmVyLCBsb29wIGNoZWNraW5nIHRvIHNlZSBpZgoJYSkgdGhlcmUgYXJlIG5vIGNoaWxkcmVuIG9yIGIpIHdlIGdldCBhIHRva2VuIGZyb20gdGhlIHBpcGUuCgoJKiBqb2IuaCAoc3RydWN0IGNoaWxkKTogUmVtb3ZlIHRoZSBqb2JfdG9rZW4gZmllbGQuCgoxOTk5LTA4LTIwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IEFsbG9jYXRlIGZvciB2YXJpYWJsZQoJZXhwYW5zaW9uIGluIGZfYXBwZW5kIHdpdGggYSBzaW1wbGUgdmFyaWFibGU6IGlmIHdlJ3JlIGxvb2tpbmcgYXQKCXRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZXMgd2UgZG9uJ3Qgd2FudCB0byB0cmFzaCB0aGUgYnVmZmVyLgoJTm90aWNlZCBieSBSZWluZXIgQmVuaW5nYSA8UmVpbmVyLkJlbmluZ2FAbWNocC5zaWVtZW5zLmRlPi4KCjE5OTktMDgtMTYgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBtYWluLmMgKG1haW4pIFtfX01TRE9TX19dOiBNaXJyb3IgYW55IGJhY2tzbGFzaGVzIGluIGFyZ3ZbMF0sIHRvCglhdm9pZCBwcm9ibGVtcyBpbiBzaGVsbCBjb21tYW5kcyB0aGF0IHVzZSBiYWNrc2xhc2hlcyBhcyBlc2NhcGUKCWNoYXJhY3RlcnMuCgoxOTk5LTA4LTE2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzcuOTMgcmVsZWFzZWQuCgoxOTk5LTA4LTEzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmcKCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfaWYpOiBOZXcgZnVuY3Rpb24gJChpZiAuLi4pIGJhc2VkIG9uIHRoZQoJb3JpZ2luYWwgYnkgSGFuLVdlbiBidXQgcmV3b3JrZWQgcXVpdGUgYSBiaXQuCgkoZnVuY3Rpb25fdGFibGUpOiBBZGQgaXQuCgkqIE5FV1M6IEludHJvZHVjZSBpdC4KCSogbWFrZS50ZXhpbmZvIChJZiBGdW5jdGlvbik6IERvY3VtZW50IGl0LgoKCSogam9iLmMgKGZyZWVfam9iX3Rva2VuKTogQ2hlY2sgZm9yIEVJTlRSIHdoZW4gd3JpdGluZyB0b2tlbnMgdG8KCXRoZSBqb2JzZXJ2ZXIgcGlwZS4KCjE5OTktMDgtMTIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglBbm90aGVyIGpvYnNlcnZlciBhbGdvcml0aG0gY2hhbmdlLiAgV2UgY29udmVuaWVudGx5IGZvcmdvdCB0aGF0Cgl0aGUgYmxvY2tpbmcgYml0IGlzIHNoYXJlZCBieSBhbGwgdXNlcnMgb2YgdGhlIHBpcGUsIGl0J3Mgbm90IGEKCXBlci1wcm9jZXNzIHNldHRpbmcuICBTaW5jZSB3ZSBoYXZlIG1hbnkgbWFrZSBwcm9jZXNzZXMgYWxsCglzaGFyaW5nIHRoZSBwaXBlIHdlIGNhbid0IHVzZSB0aGUgYmxvY2tpbmcgYml0IGFzIGEgc2lnbmFsIGhhbmRsZXIKCWZsYWcuICBJbnN0ZWFkLCB3ZSdsbCBkdXAgdGhlIHBpcGUncyByZWFkIEZEIGFuZCBoYXZlIHRoZSBTSUdDSExECgloYW5kbGVyIGNsb3NlIHRoZSBkdXAnZCBGRC4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgcmVhZCgpIHRvIGZhaWwKCXdpdGggRUJBREYgdGhlIG5leHQgdGltZSB3ZSBpbnZva2UgaXQsIHNvIHdlIGtub3cgd2UgbmVlZCB0byByZWFwCgljaGlsZHJlbi4gIFdlIHRoZW4gcmUtZHVwIGFuZCByZWFwLgoKCSogbWFpbi5jIChtYWluKTogRGVmaW5lIHRoZSBqb2JfcmZkIHZhcmlhYmxlIHRvIGhvbGQgdGhlIGR1cCdkIEZELgoJQWN0dWFsbHkgZHVwIHRoZSByZWFkIHNpZGUgb2YgdGhlIHBpcGUuICBEb24ndCBib3RoZXIgc2V0dGluZyB0aGUKCWJsb2NraW5nIGJpdCBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yLgoJKiBtYWtlLmg6IERlY2xhcmUgdGhlIGpvYl9yZmQgdmFyaWFibGUuCgkqIGpvYi5jIChjaGlsZF9oYW5kbGVyKTogSWYgdGhlIGR1cCdkIGpvYnNlcnZlciBwaXBlIGlzIG9wZW4sCgljbG9zZSBpdCBhbmQgYXNzaWduIC0xIHRvIGpvYl9yZmQgdG8gbm90aWZ5IHRoZSBtYWluIHByb2dyYW0gdGhhdAoJd2UgZ290IGEgU0lHQ0hMRC4KCShzdGFydF9qb2JfY29tbWFuZCk6IENsb3NlIHRoZSBkdXAnZCBGRCBiZWZvcmUgZXhlYydpbmcgY2hpbGRyZW4uCglTaW5jZSB3ZSBvcGVuIGFuZCBjbG9zZSB0aGlzIHRoaW5nIHNvIG9mdGVuIGl0IGRvZXNuJ3Qgc2VlbQoJd29ydGggaXQgdG8gdXNlIHRoZSBjbG9zZS1vbi1leGVjIGJpdC4KCShuZXdfam9iKTogUmVtb3ZlIGNvZGUgZm9yIHRlc3Rpbmcvc2V0dGluZyB0aGUgYmxvY2tpbmcgYml0LgoJSW5zdGVhZCBvZiBFQUdBSU4sIHRlc3QgZm9yIEVCQURGLiAgSWYgdGhlIGR1cCdkIEZEIGhhcyBiZWVuCgljbG9zZWQsIHJlLWR1cCBpdCBiZWZvcmUgd2UgcmVhcCBjaGlsZHJlbi4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfc2hlbGwpOiBCZSBhIGxpdHRsZSBtb3JlIGFjY3VyYXRlIGFib3V0IHRoZQoJbGVuZ3RoIG9mIHRoZSBlcnJvciBzdHJpbmcgdG8gYWxsb2NhdGUuCgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kX2Zvcl9maWxlKTogSWYgdGhlcmUncyBubyBmaWxlbm0gaW5mbwoJKHNheSwgZnJvbSBhIGJ1aWx0aW4gY29tbWFuZCkgdGhlbiByZXNldCByZWFkaW5nX2ZpbGUgdG8gMC4KCjE5OTktMDgtMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW50TWFrZWZpbGU6IFVzZSBnIGluIHNlZCAocy8vL2cpIHRvIHJlcGxhY2UgPjEgdmFyaWFibGUgcGVyCglsaW5lLgoKCSogTWFrZWZpbGUuRE9TLnRlbXBsYXRlIFtfX01TRE9TX19dOiBGaXggbW9zdGx5Y2xlYW4tYW1pbmZvIHRvCglyZW1vdmUgdGhlIHJpZ2h0IGZpbGVzLgoKMTk5OS0wOC0wMSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGZ1bmN0aW9uLmMgKG1zZG9zX29wZW5waXBlKSBbX19NU0RPU19fXTogKlJlYWxseSogcmV0dXJuIGEgRklMRQoJcHRyLgoKMTk5OS0wOC0wMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCU5ldyBqb2JzZXJ2ZXIgYWxnb3JpdGhtIHRvIGF2b2lkIGEgcG9zc2libGUgaG9sZSB3aGVyZSB3ZSBjb3VsZAoJbWlzcyBTSUdDSExEcyBhbmQgZ2V0IGludG8gYSBkZWFkbG9jay4gIFRoZSBvcmlnaW5hbCBhbGdvcml0aG0gd2FzCglzdWdnZXN0ZWQgYnkgUm9sYW5kIE1jR3JhdGggd2l0aCBhIG5pY2UgcmVmaW5lbWVudCBieSBQYXVsIEVnZ2VydC4KCU1hbnkgdGhhbmtzIGFzIHdlbGwgdG8gVGltIE1hZ2lsbCBhbmQgSG93YXJkIENodSwgd2hvIGFsc28KCXByb3ZpZGVkIG1hbnkgdmlhYmxlIGlkZWFzIGFuZCBjcml0aXF1ZXMuICBXZSBhbGwgaGFkIGEgZnVuIHdlZWsKCWRyZWFtaW5nIHVwIGludGVyZXN0aW5nIHdheXMgdG8gdXNlIGFuZCBhYnVzZSBVTklYIHN5c2NhbGxzIDopLgoKCVByZXZpb3VzbHkgd2UgY291bGQgbWlzcyBhIFNJR0NITEQgaWYgaXQgaGFwcGVuZWQgYWZ0ZXIgd2UgcmVhcGVkCgl0aGUgY2hpbGRyZW4gYnV0IGJlZm9yZSB3ZSByZS1lbnRlcmVkIHRoZSBibG9ja2luZyByZWFkLiAgSWYgdGhpcwoJaGFwcGVuZWQgdG8gYWxsIG1ha2VzIGFuZC9vciBhbGwgY2hpbGRyZW4sIG1ha2Ugd291bGQgbmV2ZXIgd2FrZQoJdXAuCgoJV2UgYXZvaWQgdGhpcyBieSBoYXZpbmcgdGhlIFNJR0NITEQgaGFuZGxlciByZXNldCB0aGUgYmxvY2tpbmcgYml0CglvbiB0aGUgam9ic2VydmVyIHBpcGUgcmVhZCBGRCAobm9ybWFsbHkgcmVhZCBkb2VzIGJsb2NrIGluIHRoaXMKCWFsZ29yaXRobSkuICBOb3cgaWYgdGhlIGhhbmRsZXIgaXMgY2FsbGVkIGJldHdlZW4gdGhlIHRpbWUgd2UgcmVhcAoJYW5kIHRoZSB0aW1lIHdlIHJlYWQoKSwgYW5kIHRoZXJlIGFyZSBubyB0b2tlbnMgYXZhaWxhYmxlLCB0aGUKCXJlYWQgd2lsbCBtZXJlbHkgcmV0dXJuIHdpdGggRUFHQUlOIGluc3RlYWQgb2YgYmxvY2tpbmcuCgoJKiBtYWluLmMgKG1haW4pOiBTZXQgdGhlIGJsb2NraW5nIGJpdCBleHBsaWNpdGx5IGhlcmUuCgkqIGpvYi5jIChjaGlsZF9oYW5kbGVyKTogSWYgd2UgaGF2ZSBhIGpvYnNlcnZlciBwaXBlLCBzZXQgdGhlCglub24tYmxvY2tpbmcgYml0IGZvciBpdC4KCShzdGFydF93YWl0aW5nX2pvYik6IE1vdmUgdGhlIHRva2VuIHN0dWZmIGJhY2sgdG8gbmV3X2pvYjsgaWYgd2UKCWRvIGl0IGhlcmUgdGhlbiB3ZSdyZSBub3QgY29udHJvbGxpbmcgdGhlIG51bWJlciBvZiByZW1vdGUgam9icwoJc3RhcnRlZCEKCShuZXdfam9iKTogTW92ZSB0aGUgY2hlY2sgZm9yIGpvYiBzbG90cyB0byBfYWZ0ZXJfIHdlJ3ZlIGNyZWF0ZWQgYQoJY2hpbGQgc3RydWN0dXJlLiAgSWYgdGhlIHJlYWQgcmV0dXJucyB3aXRob3V0IGdldHRpbmcgYSB0b2tlbiwgc2V0Cgl0aGUgYmxvY2tpbmcgYml0IHRoZW4gdHJ5IHRvIHJlYXBfY2hpbGRyZW4uCgoJKiBtYWtlLmggKEVJTlRSX1NFVCk6IERlZmluZSB0byB0ZXN0IGVycm5vIGlmIEVJTlRSIGlzIGF2YWlsYWJsZSwKCW9yIDAgb3RoZXJ3aXNlLiAgSnVzdCBzb21lIGNvZGUgY2xlYW51cC4KCSogYXJzY2FuLmMgKGFyX21lbWJlcl90b3VjaCk6IFVzZSBpdC4KCSogZnVuY3Rpb24uYyAoZnVuY19zaGVsbCk6IFVzZSBpdC4KCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBVc2UgaXQuCgkqIHJlbWFrZS5jICh0b3VjaF9maWxlKTogVXNlIGl0LgoKMTk5OS0wNy0yOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS5oOiBEZWZpbmUgXygpIGFuZCBOXygpIG1hY3JvcyBhcyBwYXNzdGhyb3VnaCB0byBpbml0aWF0ZQoJTkxTIHN1cHBvcnQuCgkqIDxhbGw+OiBBZGQgXygpL05fKCkgYXJvdW5kIHRyYW5zbGF0YWJsZSBzdHJpbmdzLgoKMTk5OS0wNy0yNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jOiBNYWtlIHN1cmUgbWFrZS5oIGNvbWVzIGJlZm9yZSBvdGhlciBoZWFkZXJzLgoKMTk5OS0wNy0yNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChRdWljayBSZWZlcmVuY2UpOiBVcGRhdGUgd2l0aCB0aGUgbmV3IGZlYXR1cmVzLgoKMTk5OS0wNy0yNSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIHJlbWFrZS5jIFtfX01TRE9TX19dOiBEb24ndCBpbmNsdWRlIHZhcmlhYmxlcy5oLCBpdCdzIGFscmVhZHkKCWluY2x1ZGVkLgoKCSogZnVuY3Rpb24uYyAobXNkb3Nfb3BlbnBpcGUpIFtfX01TRE9TX19dOiBSZXR1cm4gRklMRSBwdHIuCgkoZnVuY19zaGVsbCkgW19fTVNET1NfX106IEZpeCB0aGUgYXJndW1lbnQgbGlzdC4KCgkqIE1ha2VmaWxlLkRPUy50ZW1wbGF0ZTogVXBkYXRlIGZyb20gTWFrZWZpbGUuaW4uCgoJKiBSRUFETUUuRE9TLnRlbXBsYXRlOiBDb25maWd1cmUgY29tbWFuZCBmaXhlZC4KCgkqIGNvbmZpZ2guZG9zLnRlbXBsYXRlOiBVcGRhdGUgdG8gcHJvdmlkZSBkZWZpbml0aW9ucyBmb3IKCXVpbnRtYXhfdCwgZmRfc2V0X3NpemVfdCwgYW5kIEhBVkVfU0VMRUNULgoKMTk5OS0wNy0yNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc3LjkxIHJlbGVhc2VkLgoKCSogY29uZmlndXJlLmluOiBDaGFuZ2VzIHRvIHRoZSBib29zdHJhcHBpbmcgY29kZTogaWYgYnVpbGQuc2guaW4KCWRvZXNuJ3QgZXhpc3QgY29uZmlndXJlIHNwaXRzIGFuIGVycm9yIGFuZCBnZW5lcmF0ZXMgYW4gZW1wdHkKCWJ1aWxkLnNoIGZpbGUgd2hpY2ggY2F1c2VzIG1ha2UgdG8gYmUgY29uZnVzZWQuCgkqIG1haW50TWFrZWZpbGU6IERvbid0IGJ1aWxkIFJFQURNRSBlYXJseS4KCjE5OTktMDctMjMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGpvYi5jIChteV9qb2JfdG9rZW4pOiBUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHdoZXRoZXIgd2UndmUKCWhhbmRlZCBvdXIgcGVyc29uYWwgdG9rZW4gdG8gYSBzdWJwcm9jZXNzIG9yIG5vdC4gIE5vdGUgd2UgY291bGQKCXByb2JhYmx5IGluZmVyIHRoaXMgZnJvbSB0aGUgdmFsdWUgb2Ygam9iX3Nsb3RzX3VzZWQsIGJ1dCBpdCdzCgljbGVhcmVyIHRvIGp1c3Qga2VlcCBpdCBzZXBhcmF0ZWx5LiAgSm9iX3Nsb3RzX3VzZWQgaXNuJ3QgcmVhbGx5CglyZWxldmFudCB3aGVuIHJ1bm5pbmcgdGhlIGpvYiBzZXJ2ZXIuCgkoZnJlZV9qb2JfdG9rZW4pOiBOZXcgZnVuY3Rpb246IGZyZWUgYSBqb2IgdG9rZW4uICBJZiB3ZSBkb24ndAoJaGF2ZSBvbmUsIG5vLW9wLiAgSWYgd2UgaGF2ZSB0aGUgcGVyc29uYWwgdG9rZW4sIHJlY2xhaW0gaXQuICBJZgoJd2UgaGF2ZSBhbm90aGVyIHRva2VuLCB3cml0ZSBpdCBiYWNrIHRvIHRoZSBwaXBlLgoJKHJlYXBfY2hpbGRyZW4pOiBDYWxsIGZyZWVfam9iX3Rva2VuLgoJKGZyZWVfY2hpbGQpOiBDYWxsIGZyZWVfam9iX3Rva2VuLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVtb3ZlIGR1cGxpY2F0ZSB0ZXN0IGZvciAnKycgaW4gdGhlIGNvbW1hbmQuCglJZiB3ZSBkb24ndCBhcHBlYXIgdG8gYmUgcnVubmluZyBhIHJlY3Vyc2l2ZSBtYWtlLCBjbG9zZSB0aGUKCWpvYnNlcnZlciBmaWxlZGVzY3JpcHRvcnMuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBJZiBvdXIgcGVyc29uYWwgdG9rZW4gaXMgYXZhaWxhYmxlLCB1c2UgdGhhdAoJaW5zdGVhZCBvZiBnb2luZyB0byB0aGUgc2VydmVyIHBpcGUuCgkoKik6IEFkZCB0aGUgdG9rZW4gdmFsdWUgdG8gbWFueSBkZWJ1Z2dpbmcgc3RhdGVtZW50cywgYW5kIHByaW50Cgl0aGUgY2hpbGQgdGFyZ2V0IG5hbWUgaW4gYWRkaXRpb24gdG8gdGhlIHB0ciBoZXggdmFsdWUuCglDaGFuZ2UgdGhlIGRlZmF1bHQgIm5vIHRva2VuIiB2YWx1ZSBmcm9tICdcMCcgdG8gJy0nIHNvIGl0IGxvb2tzCgliZXR0ZXIgaW4gdGhlIG91dHB1dC4KCgkqIG1haW4uYyAobWFpbik6IEluc3RhbGwgdGhlIGNoaWxkX2hhbmRsZXIgd2l0aCBzaWdhY3Rpb24oKQoJaW5zdGVhZCBvZiBzaWduYWwoKSBpZiB3ZSBoYXZlIGl0LiAgT24gU3lzViBzeXN0ZW1zLCBzaWduYWwoKSB1c2VzCglTeXNWIHNlbWFudGljcyB3aGljaCBhcmUgYSBwYWluLiAgQnV0IHNpZ2FjdGlvbigpIGFsd2F5cyBkb2VzIHdoYXQKCXdlIHdhbnQuCgkobWFpbik6IElmIHdlIGdvdCBqb2Igc2VydmVyIEZEcyBmcm9tIHRoZSBlbnZpcm9ubWVudCwgdGVzdCB0aGVtCgl0byBzZWUgaWYgdGhleSdyZSBvcGVuLiAgSWYgbm90LCB0aGUgcGFyZW50IG1ha2UgY2xvc2VkIHRoZW0KCWJlY2F1c2UgaXQgZGlkbid0IHRoaW5rIHdlIHdlcmUgYSBzdWJtYWtlLiAgUHJpbnQgYSB3YXJuaW5nIGFuZAoJc3VnZ2VzdGlvbiB0byB1c2UgIisiIG9uIHRoZSBzdWJtYWtlIGludm9jYXRpb24sIGFuZCBoYXJkLXNldCB0bwoJLWoxIGZvciB0aGlzIGluc3RhbmNlIG9mIG1ha2UuCgkobWFpbik6IENoYW5nZSB0aGUgYWxnb3JpdGhtIGZvciBhc3NpZ25pbmcgc2xvdHMgdG8gYmUgbW9yZQoJcm9idXN0LiAgUHJldmlvdXNseSBtYWtlIGNoZWNrZWQgdG8gc2VlIGlmIGl0IHRob3VnaHQgYSBzdWJwcm9jZXNzCgl3YXMgYSBzdWJtYWtlIGFuZCBpZiBzbywgZGlkbid0IGdpdmUgaXQgYSB0b2tlbi4gIFNpbmNlIG1ha2UncwoJZG9uJ3QgY29uc3VtZSB0b2tlbnMgd2UgY291bGQgc3Bhd24gbWFueSBvZiBtYWtlcyBmaWdodGluZyBmb3IgYQoJc21hbGwgbnVtYmVyIG9mIHRva2Vucy4gIFBsdXMgdGhpcyBpcyB1bnJlbGlhYmxlIGJlY2F1c2Ugc3VibWFrZXMKCW1pZ2h0IG5vdCBiZSByZWNvZ25pemVkIGJ5IHRoZSBwYXJlbnQgKHNlZSBhYm92ZSkgdGhlbiBhbGwgdGhlCgl0b2tlbnMgY291bGQgYmUgdXNlZCB1cCBieSB1bnJlY29nbml6ZWQgbWFrZXMsIGFuZCBubyBvbmUgY291bGQKCXJ1bi4gIE5vdyBldmVyeSBtYWtlIGNvbnN1bWVzIGEgdG9rZW4gZnJvbSBpdHMgcGFyZW50LiAgSG93ZXZlciwKCXRoZSBtYWtlIGNhbiBhbHNvIHVzZSB0aGlzIHRva2VuIHRvIHNwYXduIGEgY2hpbGQuICBJZiB0aGUgbWFrZQoJd2FudHMgbW9yZSB0aGFuIG9uZSwgaXQgZ29lcyB0byB0aGUgam9ic2VydmVyIHBpcGUuICBUaHVzIHRoZXJlCgl3aWxsIG5ldmVyIGJlIG1vcmUgdGhhbiBOIG1ha2VzIHJ1bm5pbmcgZm9yIC1qTiwgYW5kIE4qMiBwcm9jZXNzZXMKCShOIG1ha2VzIGFuZCB0aGVpciBOIGNoaWxkcmVuKS4gIEV2ZXJ5IG1ha2UgY2FuIGFsd2F5cyBydW4gYXQKCWxlYXN0IG9uZSBqb2IsIGFuZCB3ZSdsbCBuZXZlciBkZWFkbG9jay4gIChOb3RlIHRoZSBjbG9zaW5nIG9mIHRoZQoJcGlwZSBmb3Igbm9uLXN1Ym1ha2VzIGFsc28gc29sdmVzIHRoaXMsIGJ1dCB0aGlzIGlzIHN0aWxsIGEgYmV0dGVyCglhbGdvcml0aG0uKSAgU28hICBPbmx5IHB1dCBOLTEgdG9rZW5zIGludG8gdGhlIHBpcGUsIHNpbmNlIHRoZQoJdG9wbW9zdCBtYWtlIGtlZXBzIG9uZSBmb3IgaXRzZWxmLgoKCSogY29uZmlndXJlLmluOiBGaW5kIHNpZ2FjdGlvbi4gIERpc2FibGUgam9iIHNlcnZlciBzdXBwb3J0IHVubGVzcwoJdGhlIHN5c3RlbSBwcm92aWRlcyBpdCwgaW4gYWRkaXRpb24gdG8gZWl0aGVyIHdhaXRwaWQoKSBvcgoJd2FpdDMoKS4KCjE5OTktMDctMjIgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQGRldi50aXZvbGkuY29tPgoKCSogYXJzY2FuLmMgKGFyX21lbWJlcl90b3VjaCkgW1dJTkRPV1MzMl06IFRoZSBhcl9kYXRlIGZpZWxkIGlzIGEKCXN0cmluZyBvbiBXaW5kb3dzLCBub3QgYSB0aW1lc3RhbXAuCgoxOTk5LTA3LTIxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzcuOTAgcmVsZWFzZWQuCgoJKiBNYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IFJlcXVpcmUgYXV0b21ha2UgMS40LgoKCSogZnVuY3Rpb24uYzogUmVhcnJhbmdlIHNvIHdlIGRvbid0IG5lZWQgdG8gcHJlZGVjbGFyZSB0aGUKCWZ1bmN0aW9uX3RhYmxlIGFycmF5OyBLJlIgQyBjb21waWxlcnMgZG9uJ3QgbGlrZSB0aGF0LgoKCSogYWNpbmNsdWRlLm00IChBQ19GVU5DX1NFTEVDVCk6IE91Y2g7IHRoaXMgcmVxdWlyZXMgYW4gQU5TSSBDCgljb21waWxlciEgIENoYW5nZSB0byB3b3JrIHdpdGggSyZSIGNvbXBpbGVycyBhcyB3ZWxsLgoKCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBQdXQgYnVpbGQuc2ggYmFjay4gIEkgZG9uJ3Qga25vdyBob3cgSQoJdGhvdWdodCBpdCB3b3VsZCB3b3JrIHRoaXMgd2F5IDotLy4gIFdlJ2xsIGhhdmUgdG8gdGhpbmsgb2YKCXNvbWV0aGluZyBlbHNlLgoJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIHJ1bGUgdG8gY3JlYXRlIGJ1aWxkLnNoLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IFJlYXJyYW5nZSB0aGUgZGVmYXVsdCBjb21tYW5kCglsaW5lcyB0byBjb25mb3JtIHRvIFBPU0lYIHJ1bGVzIChwdXQgdGhlIGZpbGVuYW1lIGFyZ3VtZW50ICQ8CglfYWZ0ZXJfIHRoZSBPVVRQVVRfT1BUSU9OLCBub3QgYmVmb3JlIGl0KS4KCgkqIHZhcmlvdXM6IENoYW5nZWQgIXN0cm5jbXAoKSBjYWxscyB0byBzdHJuZXEoKSBtYWNyb3MuCgoJKiBtaXNjLmMgKHNpbmRleCk6IE1ha2Ugc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQuCgoJKiBkaXIuYyAoZmlsZV9pbXBvc3NpYmxlKTogQ2hhbmdlIHNhdmVzdHJpbmcoWCxzdHJsZW4oWCkpIHRvIHhzdHJkdXAoKS4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBEaXR0by4KCSogbWFpbi5jIChlbnRlcl9jb21tYW5kX2xpbmVfZmlsZSk6IERpdHRvLgoJKG1haW4pOiBEaXR0by4KCSogbWlzYy5jIChjb3B5X2RlcF9jaGFpbik6IERpdHRvLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBEaXR0by4KCShwYXJzZV9maWxlX3NlcSk6IERpdHRvLgoJKHRpbGRlX2V4cGFuZCk6IERpdHRvLgoJKG11bHRpX2dsb2IpOiBEaXR0by4KCSogcnVsZS5jIChpbnN0YWxsX3BhdHRlcm5fcnVsZSk6IERpdHRvLgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfdmFyaWFibGVfaW5fc2V0KTogRGl0dG8uCgkoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBEaXR0by4KCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBEaXR0by4KCgkqIG1pc2MuYyAoeHJlYWxsb2MpOiBTb21lIHJlYWxsb2NzIGFyZSBub24tc3RhbmRhcmQ6IHdvcmsgYXJvdW5kCgl0aGVtIGluIHhyZWFsbG9jIGJ5IGNhbGxpbmcgbWFsbG9jIGlmIFBUUiBpcyBOVUxMLgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIHhyZWFsbG9jKCkgZGlyZWN0bHkgaW5zdGVhZCBvZiB0ZXN0aW5nIGZvcgoJTlVMTC4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfc29ydCk6IERvbid0IHRyeSB0byBmcmVlIE5VTEw7IHNvbWUgb2xkZXIsCglub24tc3RhbmRhcmQgdmVyc2lvbnMgb2YgZnJlZSgpIGRvbid0IGxpa2UgaXQuCgoJKiBjb25maWd1cmUuaW4gKC0tZW5hYmxlLWRtYWxsb2MpOiBJbnN0YWxsIHNvbWUgc3VwcG9ydCBmb3IgdXNpbmcKCWRtYWxsb2MgKGh0dHA6Ly93d3cuZG1hbGxvYy5jb20vKSB3aXRoIG1ha2UuICBVc2UgLS1lbmFibGUtZG1hbGxvYwoJd2l0aCBjb25maWd1cmUgdG8gZW5hYmxlIGl0LgoKCSogZnVuY3Rpb24uYyAoZnVuY3Rpb25fdGFibGVfZW50cnkpOiBXaG9vcHMhICBUaGUgZnVuY3Rpb24uYwoJcmV3cml0ZSBicmVha3MgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogYWxsIHRleHQgdG8gYSBmdW5jdGlvbiBpcwoJYnJva2VuIGludG8gYXJndW1lbnRzLCBhbmQgZXh0cmFzIGFyZSBpZ25vcmVkLiAgU28gJChzb3J0IGEsYixjKQoJcmV0dXJucyAiYSIhICBFdGMuICBPdWNoLiAgRml4IGl0IGJ5IG1ha2luZyBhIHBvc2l0aXZlIHZhbHVlIGluCgl0aGUgUkVRVUlSRURfQVJHUyBmaWVsZCBtZWFuIGV4YWN0bHkgdGhhdCBtYW55IGFyZ3VtZW50cyB0byB0aGUKCWZ1bmN0aW9uOyBhbnkgImV4dHJhcyIgYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgbGFzdCBhcmd1bWVudCBhcwoJYmVmb3JlLiAgQSBuZWdhdGl2ZSB2YWx1ZSBtZWFucyBhdCBsZWFzdCB0aGF0IG1hbnksIGJ1dCBtYXkgYmUKCW1vcmU6IGluIHRoaXMgY2FzZSBhbGwgdGV4dCBpcyBicm9rZW4gb24gY29tbWFzLgoJKGhhbmRsZV9mdW5jdGlvbik6IFN0b3Agd2hlbiB3ZSd2ZSBzZWVuIFJFUVVJUkVEX0FSR1MgYXJncywgaWYgPjAuCgkoZXhwYW5kX2J1aWx0aW5fZnVuY3Rpb24pOiBDb21wYXJlIG51bWJlciBvZiBhcmdzIHRvIHRoZSBhYnNvbHV0ZQoJdmFsdWUgb2YgUkVRVUlSRURfQVJHUy4KCjE5OTktMDctMjAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IEVuc3VyZSB0aGF0IHRoZSBzdGF0ZSBvZiB0aGUgdGFyZ2V0CglpcyBjc19ydW5uaW5nLiAgSXQgbWlnaHQgbm90IGJlIGlmIHdlIHNraXBwZWQgYWxsIHRoZSBsaW5lcyBkdWUgdG8KCS1uIChmb3IgZXhhbXBsZSkuCgoJKiBjb21tYW5kcy5jIChleGVjdXRlX2ZpbGVfY29tbWFuZHMpOiBJZiB3ZSBkaXNjb3ZlciB0aGF0IHRoZQoJY29tbWFuZCBzY3JpcHQgaXMgZW1wdHkgYW5kIHN1Y2NlZWQgZWFybHksIHNldCBjc19ydW5uaW5nIHNvIHRoZQoJbW9kdGltZSBvZiB0aGUgdGFyZ2V0IGlzIHN0aWxsIHJlY2hlY2tlZC4KCgkqIHJ1bGUuYyAoZnJlZXJ1bGUpOiBGcmVlIHRoZSBkZXBlbmRlbmN5IGxpc3QgZm9yIHRoZSBydWxlLgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBXaGVuIHR1cm5pbmcgYW4gaW50ZXJtZWRpYXRlIGZpbGUKCWludG8gYSByZWFsIHRhcmdldCwga2VlcCB0aGUgYWxzb19tYWtlIGxpc3QuCglGcmVlIHRoZSBkZXAtPm5hbWUgaWYgd2UgZGlkbid0IHVzZSBpdCBkdXJpbmcgZW50ZXJfZmlsZSgpLgoKMTk5OS0wNy0xNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRG9uJ3QgYWxsb2NhdGUgdGhlIGNvbW1hbmRzIGJ1ZmZlciB1bnRpbAoJd2UncmUgc3VyZSB3ZSBmb3VuZCBhIG1ha2VmaWxlIGFuZCB3b24ndCByZXR1cm4gZWFybHkgKG1lbSBsZWFrKS4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IEJyb2tlbiAjaWZkZWYgdGVzdDogbG9vayBmb3IgRl9TRVRGRCwKCW5vdCBGRF9TRVRGRC4gIENsb3NlLW9uLWV4ZWMgaXNuJ3QgZ2V0dGluZyBzZXQgb24gdGhlIGJhZF9zdGRpbgoJZmlsZSBkZXNjcmlwdG9yIGFuZCBpdCdzIGxlYWtpbmcgOi0vLgoJKiBnZXRsb2FkYXZnLmMgKGdldGxvYWRhdmcpOiBEaXR0by4KCjE5OTktMDctMTUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZpeCBzb21lIHBvdGVudGlhbCBtZW1vcnkgc3RvbXBzIHBhcnNpbmcKCWBkZWZpbmUnIGRpcmVjdGl2ZXMgd2hlcmUgbm8gdmFyaWFibGUgbmFtZSBpcyBnaXZlbi4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfY2FsbCk6IFJlbmFtZSBmcm9tIGZ1bmNfYXBwbHkuICBWYXJpb3VzIGNvZGUKCWNsZWFudXAgYW5kIHRpZ2h0ZW5pbmcuCgkoZnVuY3Rpb25fdGFibGUpOiBBZGQgImNhbGwiIGFzIGEgdmFsaWQgYnVpbHRpbiBmdW5jdGlvbi4KCgkqIG1ha2UudGV4aW5mbyAoQ2FsbCBGdW5jdGlvbik6IERvY3VtZW50IGl0LgoKCSogTkVXUzogQW5ub3VuY2UgaXQuCgoxOTk5LTA3LTA5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pIFtfX01TRE9TX18sIFdJTkRPV1MzMl06CglUcmVhdCAib3ZlcnJpZGUgU0hFTEw9IiB0aGUgc2FtZSBhcyBqdXN0ICJTSEVMTD0iLgoKMTk5OS0wNy0wOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogRG9uJ3QgZ2V0IGEgc2Vjb25kIGpvYiB0b2tlbiBpZiB3ZQoJYWxyZWFkeSBoYXZlIG9uZTsgaWYgd2UncmUgd2FpdGluZyBvbiB0aGUgbG9hZCB0byBnbyBkb3duCglzdGFydF93YWl0aW5nX2pvYigpIG1pZ2h0IGdldCBjYWxsZWQgdHdpY2Ugb24gdGhlIHNhbWUgZmlsZS4KCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBBZGQgbmV3IGZpZWxkLCBtdGltZV9iZWZvcmVfdXBkYXRlLgoJV2hlbiBub3RpY2VfZmluaXNoZWRfZmlsZSBydW5zIGl0IGFzc2lnbnMgdGhlIGNhY2hlZCBsYXN0X210aW1lIHRvCgl0aGlzIGZpZWxkLgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBOb3RpY2UgdGhhdCBhIGZpbGUgd2Fzbid0IHVwZGF0ZWQKCWJ5IGFza2luZyBpZiBpdCBjaGFuZ2VkIChnLT5jaGFuZ2VkKSBhbmQgY29tcGFyaW5nIHRoZSBjdXJyZW50CgljYWNoZWQgdGltZSAobGFzdF9tdGltZSkgd2l0aCB0aGUgcHJldmlvdXMgb25lLCBzdG9yZWQgaW4KCW10aW1lX2JlZm9yZV91cGRhdGUuICBUaGUgcHJldmlvdXMgY2hlY2sgKCJkaWQgbGFzdF9tdGltZSBjaGFuZ2VkCglkdXJpbmcgdGhlIHJ1biBvZiB1cGRhdGVfZmlsZT8iKSBmYWlscyBmb3IgcGFyYWxsZWwgYnVpbGRzIGJlY2F1c2UKCWxhc3RfbXRpbWUgaXMgc2V0IGR1cmluZyByZWFwX2NoaWxkcmVuLCBiZWZvcmUgdXBkYXRlX2ZpbGUgaXMgcnVuLgoJVGhpcyBjYXVzZXMgdXBkYXRlX2dvYWxfY2hhaW4gdG8gYWx3YXlzIHJldHVybiAtMSAobm90aGluZwoJcmVidWlsdCkgd2hlbiBydW5uaW5nIHBhcmFsbGVsICgtak4pLiAgVGhpcyBpcyBPSyBkdXJpbmcgIm5vcm1hbCIKCWJ1aWxkcyBzaW5jZSBvdXIgY2FsbGVyIChtYWluKSB0cmVhdHMgdGhlc2UgY2FzZXMgaWRlbnRpY2FsbHkgaW4KCXRoYXQgY2FzZSwgYnV0IGlmIHdoZW4gcmVidWlsZGluZyBtYWtlZmlsZXMgdGhlIGRpZmZlcmVuY2UgaXMgdmVyeQoJaW1wb3J0YW50LCBhcyBpdCBjb250cm9scyB3aGV0aGVyIHdlIHJlLWV4ZWMgb3Igbm90LgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IENvcHkgdGhlIG10aW1lX2JlZm9yZV91cGRhdGUgZmllbGQuCgkoc25hcF9kZXBzKTogSW5pdGlhbGl6ZSBtdGltZV9iZWZvcmVfdXBkYXRlIHRvIC0xLgoJKiBtYWluLmMgKG1haW4pOiBJbml0aWFsaXplIG10aW1lX2JlZm9yZV91cGRhdGUgb24gb2xkICgtbykgYW5kCgluZXcgKC1XKSBmaWxlcy4KCjE5OTktMDctMDggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBEZWZpbmUgYSBuZXcgc3dpdGNoIC1SIChvcgoJLS1uby1idWlsdGluLXZhcmlhYmxlcykuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGUgZGVmaW5pbmcgb2YgYWxsCgl0aGUgR05VIG1ha2UgYnVpbHRpbiB2YXJpYWJsZXMuCgkobWFpbik6IElmIC1SIHdhcyBnaXZlbiwgZm9yY2UgLXIgYXMgd2VsbC4KCSogZGVmYXVsdC5jIChkZWZpbmVfZGVmYXVsdF92YXJpYWJsZXMpOiBUZXN0IHRoZSBuZXcgZmxhZy4KCSogbWFrZS5oOiBEZWNsYXJlIGdsb2JhbCBmbGFnLgoJKiBtYWtlLnRleGluZm8gKE9wdGlvbnMgU3VtbWFyeSk6IERvY3VtZW50IHRoZSBuZXcgb3B0aW9uLgoJKEltcGxpY2l0IFZhcmlhYmxlcyk6IERpdHRvLgoKMTk5OS0wNy0wNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChPcHRpb25zIFN1bW1hcnkpOiBDb3JyZWN0IGV4YW1wbGVzIGluCgktLXByaW50LWRhdGEtYmFzZSBvcHRpb24gc3VtbWFyeSAocHJvYmxlbSByZXBvcnRlZCBieSBEYXZpZCBNb3JzZQoJPG1vcnNlQG5pY2hpbWVuLmNvbT4pLgoKCSogYXJzY2FuLmM6IEFkZCBzdXBwb3J0IGZvciBhcmNoaXZlcyBpbiBXaW5kb3dzIChWQysrKS4gIEZyYW5rCglMaWJicmVjaHQgPGZyYW5rbEBhYnp4LmJlbGdpdW0uaHAuY29tPiBwcm92aWRlZCBpbmZvIG9uIGhvdyB0byBkbwoJdGhpcy4KCSogTk1ha2VmaWxlLnRlbXBsYXRlIChDRkxBR1NfYW55KTogUmVtb3ZlIE5PX0FSQ0hJVkVTIGZyb20gdGhlCgljb21waWxlIGxpbmUuCgkqIGJ1aWxkX3czMi5iYXQ6IERpdHRvLgoKCSogcmVtYWtlLmMgKG5vX3J1bGVfZXJyb3IpOiBGaXggLWluY2x1ZGUvc2luY2x1ZGUgc28gaXQgZG9lc24ndAoJZ2l2ZSBlcnJvcnMgaWYgeW91IHRyeSB0byAtaW5jbHVkZSB0aGUgc2FtZSBmaWxlIHR3aWNlLgoJKHVwZGF0aW5nX21ha2VmaWxlcyk6IE5ldyB2YXJpYWJsZTogd2UgbmVlZCB0byBrbm93IHRoaXMgaW5mbyBpbgoJbm9fcnVsZV9lcnJvcigpIHNvIHdlIGtub3cgd2hldGhlciB0byBwcmludCBhbiBlcnJvciBvciBub3QuCgkodXBkYXRlX2ZpbGVfMSk6IFVuY29uZGl0aW9uYWxseSBjYWxsIG5vX3J1bGVfZXJyb3IoKSwgZG9uJ3QgdHJ5Cgl0byBwbGF5IGdhbWVzIHdpdGggdGhlIGRvbnRjYXJlIGZsYWcuCgoxOTk5LTA2LTE0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKFJlbWFraW5nIE1ha2VmaWxlcyk6IEFkZCBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0bwoJcHJldmVudCBpbXBsaWNpdCBydWxlIHNlYXJjaGVzIGZvciBtYWtlZmlsZXMuCgoJKiBtYWtlLjE6IFJlbW92ZSBzdGF0ZW1lbnQgdGhhdCBtYWtlIGNvbnRpbnVlcyBwcm9jZXNzaW5nIHdoZW4gLXYKCWlzIGdpdmVuLgoKMTk5OS0wNi0xNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2FzdCAtMSBhcmd1bWVudHMgdG8KCXZhcmlhYmxlX2V4cGFuZF9zdHJpbmcoKSB0byBsb25nLiAgQWxleGFuZHJlIFNhdXZlCgk8QWxleGFuZHJlLlNBVVZFQGlmcC5mcj4gcmVwb3J0cyB0aGF0IHdpdGhvdXQgY2FzdHMsIHRoaXMgYnJlYWtzCglvbiBhIE5FQyBTVVBFUi1VWCBTWC00IHN5c3RlbSAoYW5kIGl0J3Mgd3Jvbmcgd2l0aG91dCBhIGNhc3QKCWFueXdheSkuICBPZiBjb3Vyc2UsIChhKSBJJ2QgcmVhbGx5IGxvdmUgdG8gc3RhcnQgdXNpbmcgZnVuY3Rpb24KCXByb3RvdHlwZXMsIGFuZCAoYikgdGhlcmUncyBhIHdob2xlIHNsZXcgb2YgaXNzdWVzIHJlbGF0ZWQgdG8gaW50Cgl2cy4gbG9uZyBhbmQgc2lnbmVkIHZzLiB1bnNpZ25lZCBpbiB0aGUgbGVuZ3RoIGhhbmRsaW5nIG9mCgl2YXJpYWJsZSBidWZmZXJzLCBldGMuICBHcm9zcy4gIE5lZWRzIGEgY29tcGxldGUgbXVja2luZy1vdXQuCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9leHBhbmQpOiBEaXR0by4KCgkqIGFjaW5jbHVkZS5tNCAoQUNfRlVOQ19TRUxFQ1QpOiBTbGlnaHQgZW5oYW5jZW1lbnQgZm9yIEFJWCAzLjIgYnkKCUxhcnMgSGVja2luZyA8bGhlY2tpbmdAbm1yYy51Y2MuaWU+LgoKCSogcmVhZC5jIChnZXRfbmV4dF9td29yZCk6IEFsbG93IGNvbG9ucyB0byBiZSBlc2NhcGVkIGluIHRhcmdldAoJbmFtZXM6IGZpeCBmb3IgcmVncmVzc2lvbiBmYWlsdXJlLgoKMTk5OS0wNC0yNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChtYWluKTogUmVzZXQgcmVhZF9tYWtlZmlsZXMgdG8gZW1wdHkgYWZ0ZXIgcHJvY2Vzc2luZyBzbwoJd2UgZ2V0IHRoZSByaWdodCBlcnJvciBtZXNzYWdlLgoKMTk5OS0wNC0yNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvOiBVcGRhdGVzIHRvIEBkaXJjYXRlZ29yeSBhbmQgQGRpcmVudHJ5IHN1Z2dlc3RlZCBieQoJS2FybCBCZXJyeSA8a2FybEBjcy51bWIuZWR1Pi4KCjE5OTktMDQtMjMgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpIFtfX01TRE9TX19dOiBDYWxsIHVuYmxvY2tfc2lncyBiZWZvcmUKCXR1cm5pbmcgb2ZmIGRvc19jb21tYW5kX3J1bm5pbmcsIHNvIGNoaWxkJ3Mgc2lnbmFscyBwcm9kdWNlIHRoZQoJcmlnaHQgZWZmZWN0LgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSBbX19NU0RPU19fXTogVXNlIEVYSVRfRkFJTFVSRQoJaW5zdGVhZCBvZiAxLgoKMTk5OS0wNC0xOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGNvbmZpZ2guZG9zLnRlbXBsYXRlOiBVcGRhdGUgdG8gcmVjb2duaXplIHRoYXQgdmVyc2lvbiAyLjAyIG9mCglESkdQUCBjb250YWlucyBzeXNfc2lnbGlzdCBzdHVmZi4KCjE5OTktMDQtMTQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoT3B0aW9ucy9SZWN1cnNpb24pOiBEb2N1bWVudCB0aGUgam9iIHNlcnZlci4KCShQYXJhbGxlbCk6IFR3ZWFrcy4KCjE5OTktMDQtMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglJbXBsZW1lbnQgYSBuZXcgImpvYiBzZXJ2ZXIiIGZlYXR1cmU7IHRoZSBpbXBsZW1lbnRhdGlvbiB3YXMKCXN1Z2dlc3RlZCBieSBIb3dhcmQgQ2h1IDxoeWNAaGlnaGxhbmRzdW4uY29tPi4KCgkqIGNvbmZpZ3VyZS5pbiAoam9iLXNlcnZlcik6IE5ldyBkaXNhYmxlIG9wdGlvbiBmb3Igam9iIHNlcnZlcgoJc3VwcG9ydC0taXQncyBlbmFibGVkIGJ5IGRlZmF1bHQuICBJZiBpdCB3b3JrcyB3ZWxsIHRoaXMgd2lsbCBnbwoJYXdheS4KCgkqIE5FV1M6IFN1bW1hcml6ZSB0aGUgbmV3IGZlYXR1cmUuCgoJKiBhY2NvbmZpZy5oOiBOZXcgZGVmaW5pdGlvbiBNQUtFX0pPQlNFUlZFUiBpZiBqb2Igc2VydmVyIHN1cHBvcnQKCWlzIGVuYWJsZWQuCgkqIGNvbmZpZy5oLXZtcy50ZW1wbGF0ZTogVW5kZWYgTUFLRV9KT0JTRVJWRVIgZm9yIHRoaXMgcG9ydC4KCSogY29uZmlnLmguVzMyLnRlbXBsYXRlOiBEaXR0by4KCSogY29uZmlnLmFtaS50ZW1wbGF0ZTogRGl0dG8uCgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaCk6IEFkZCBhIG5ldyB0eXBlOiBpbnRfc3RyaW5nLgoJKHN3aXRjaGVzW10pIFVzZSBpbnRfc3RyaW5nIGZvciAtaiBpZiBNQUtFX0pPQlNFUlZFUi4KCShpbml0X3N3aXRjaGVzKTogSW5pdGlhbGl6ZSB0aGUgbmV3IGludF9zdHJpbmcgc3dpdGNoIHR5cGUuCgkocHJpbnRfdXNhZ2UpOiBOZXcgZnVuY3Rpb24sIGV4dHJhY3RlZCBmcm9tIGRlY29kZV9zd2l0Y2hlcygpLgoJKGRlY29kZV9zd2l0Y2hlcyk6IENhbGwgaXQuICBEZWNvZGUgdGhlIG5ldyBpbnRfc3RyaW5nIHN3aXRjaCB0eXBlLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBBZGQgbmV3IGludF9zdHJpbmcgc3dpdGNoIGRhdGEgdG8gTUFLRUZMQUdTLgoJKGpvYl9mZHNbXSkgQXJyYXkgdG8gY29udGFpbiB0aGUgcGlwZSBmaWxlIGRlc2NyaXB0b3JzLgoJKG1haW4pOiBQYXJzZSB0aGUgam9iX3Nsb3RzX3N0ciBvcHRpb24gcmVzdWx0cy4gIElmIG5lY2Vzc2FyeSwKCWNyZWF0ZSB0aGUgcGlwZSBhbmQgc2VlZCBpdCB3aXRoIHRva2Vucy4gIFNldCB0aGUgbm9uLWJsb2NraW5nIGJpdAoJZm9yIHRoZSByZWFkIGZkLiAgRW5hYmxlIHRoZSBzaWduYWwgaGFuZGxlciBmb3IgU0lHQ0hMRCBldmVuIGlmIHdlCgloYXZlIGEgbm9uLWhhbmdpbmcgd2FpdDsgaXQncyBuZWVkZWQgdG8gaW50ZXJydXB0IHRoZSBzZWxlY3QoKSBpbgoJam9iLmM6c3RhcnRfd2FpdGluZ19qb2IoKS4KCgkqIG1ha2UuaDogRGVjbGFyZSBqb2JfZmRzW10uCgoJKiBqb2IuaCAoc3RydWN0IGNoaWxkKTogQWRkIGpvYl90b2tlbiBmaWVsZCB0byBzdG9yZSB0aGUgdG9rZW4gZm9yCgl0aGlzIGpvYiAoaWYgYW55KS4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogV2hlbiBhIGNoaWxkIGlzIGZ1bGx5IHJlYXBlZCwgcmVsZWFzZSB0aGUKCXRva2VuIGJhY2sgaW50byB0aGUgcGlwZS4KCShmcmVlX2NoaWxkKTogSWYgdGhlIGNoaWxkIHRvIGJlIGZyZWVkIHN0aWxsIGhhcyBhIHRva2VuLCBwdXQgaXQKCWJhY2suCgkobmV3X2pvYik6IEluaXRpYWxpemUgdGhlIGpvYl90b2tlbiBtZW1iZXIuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBGb3IgbG9jYWwgam9icywgaWYgd2UncmUgdXNpbmcgdGhlIHBpcGUsIGdldAoJYSB0b2tlbiBiZWZvcmUgd2UgY2hlY2sgdGhlIGxvYWQsIGV0Yy4gIFdlIGRvIHRoaXMgYnkgcGVyZm9ybWluZyBhCglub24tYmxvY2tpbmcgcmVhZCBpbiBhIGxvb3AuICBJZiB0aGUgcmVhZCBmYWlscywgbm8gdG9rZW4gaXMKCWF2YWlsYWJsZS4gIERvIGEgc2VsZWN0IG9uIHRoZSBmZCB0byB3YWl0IGZvciBhIHRva2VuLiAgV2UgbmVlZCB0bwoJcmUtZW5hYmxlIHRoZSBzaWduYWwgaGFuZGxlciBmb3IgU0lHQ0hMRCBldmVuIGlmIHdlIGhhdmUgYQoJbm9uLWhhbmdpbmcgd2FpdHBpZCgpIG9yIHdhaXQzKCksIHNvIHRoYXQgdGhlIHNpZ25hbCB3aWxsCglpbnRlcnJ1cHQgdGhlIHNlbGVjdCgpIGFuZCB3ZSBjYW4gd2FrZSB1cCB0byByZWFwIGNoaWxkcmVuLgoJKGNoaWxkX2hhbmRsZXIpOiBSZS1lbmFibGUgdGhlIHNpZ25hbCBoYW5kbGVyLiAgVGhlIGNvdW50IGlzIHN0aWxsCglrZXB0IGFsdGhvdWdoIGl0J3Mgbm90IG5lZWRlZCBvciB1c2VkIHVubGVzcyB5b3UgZG9uJ3QgaGF2ZQoJd2FpdHBpZCgpIG9yIHdhaXQzKCkuCgoxOTk5LTA0LTEwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKG1haW4pOiBSZXNldCB0aGUgY29uc2lkZXJlZCBiaXQgb24gYWxsIHRoZSBtYWtlZmlsZXMgaWYKCXNvbWV0aGluZyBmYWlsZWQgdG8gdXBkYXRlOyB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhlbSBhZ2FpbiBpZiB0aGV5CglhcHBlYXIgYXMgbm9ybWFsIHRhcmdldHMgaW4gb3JkZXIgdG8gZ2V0IHRoZSBwcm9wZXIgZXJyb3IgbWVzc2FnZS4KCjE5OTktMDQtMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglQZXJmb3JtYW5jZSBlbmhhbmNlbWVudCBmcm9tIFRpbSBNYWdpbGwgPHRpbS5tYWdpbGxAdGVsb3BzLmd0ZS5jb20+LgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogSWYgeW91IGhhdmUgbGFyZ2UgbnVtYmVycyBvZgoJZGVwZW5kZW5jaWVzIGFuZCB5b3UgcnVuIGluIHBhcmFsbGVsLCBtYWtlIGNhbiBzcGVuZCBjb25zaWRlcmFibGUKCXRpbWUgZWFjaCBwYXNzIHRocm91Z2ggdGhlIGdyYXBoIGxvb2tpbmcgYXQgYnJhbmNoZXMgaXQgaGFzCglhbHJlYWR5IHNlZW4uICBTaW5jZSB3ZSBvbmx5IHJlYXBfY2hpbGRyZW4oKSB3aGVuIHN0YXJ0aW5nIGEgcGFzcywKCW5vdCBpbiB0aGUgbWlkZGxlLCBpZiBhIGJyYW5jaCBoYXMgYmVlbiBzZWVuIGFscmVhZHkgaW4gdGhhdCBwYXNzCglub3RoaW5nIGludGVyZXN0aW5nIGNhbiBoYXBwZW4gdW50aWwgdGhlIG5leHQgcGFzcy4gIFNvLCB3ZSB0b2dnbGUKCWEgYml0IHNheWluZyB3aGV0aGVyIHdlJ3ZlIHNlZW4gdGhpcyB0YXJnZXQgaW4gdGhpcyBwYXNzIG9yIG5vdC4KCSh1cGRhdGVfZ29hbF9jaGFpbik6IEluaXRpYWxseSBzZXQgdGhlIGdsb2JhbCBjb25zaWRlcmVkIHRvZ2dsZSB0bwoJMSwgc2luY2UgYWxsIHRhcmdldHMgaW5pdGlhbGl6ZSB0aGVpciBib29sZWFuIHRvIDAuICBBdCB0aGUgZW5kIG9mCgllYWNoIHBhc3MsIHRvZ2dsZSB0aGUgZ2xvYmFsIGNvbnNpZGVyZWQgdmFyaWFibGUuCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBQZXItZmlsZSBjb25zaWRlcmVkIHRvZ2dsZSBiaXQuCgkqIGZpbGUuYzogTmV3IGdsb2JhbCB0b2dnbGUgdmFyaWFibGUgY29uc2lkZXJlZC4KCjE5OTktMDQtMDUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKTogQWRkZWQgc3VwcG9ydCBmb3IgQVJGWk1BRyAoY29tcHJlc3NlZAoJYXJjaGl2ZXM/KSBmb3IgRGlnaXRhbCBVTklYIEMrKy4gIEluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5CglQYXRyaWNrCUUuIEtyb2dlbCA8cGVrcm9nZWxAbXR1LmVkdT4uCgkoYXJfbWVtYmVyX3RvdWNoKTogRGl0dG8uCgoxOTk5LTA0LTAzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IElmOiBhKSB3ZSBmb3VuZCBhIGZpbGUgYW5kIGIpIHdlIGRpZG4ndAoJY3JlYXRlIGl0IGFuZCBjKSBpdCdzIG5vdCBtYXJrZWQgYXMgYW4gaW1wbGljaXQgdGFyZ2V0IGFuZCBkKSBpdAoJaXMgbWFya2VkIGFzIGFuIGludGVybWVkaWF0ZSB0YXJnZXQsIHRoZW4gaXQgd2FzIHNvIG1hcmtlZCBkdWUgdG8KCWFuIC5JTlRFUk1FRElBVEUgc3BlY2lhbCB0YXJnZXQsIGJ1dCBpdCBhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlCglkaXJlY3RvcnkuICBJbiB0aGlzIGNhc2UsIHVuc2V0IHRoZSBpbnRlcm1lZGlhdGUgZmxhZyBzbyB3ZSB3b24ndAoJZGVsZXRlIGl0IHdoZW4gbWFrZSBpcyBkb25lLiAgSXQgZmVlbHMgbGlrZSBpdCB3b3VsZCBiZSBjbGVhbmVyIHRvCglwdXQgdGhpcyBjaGVjayBpbiB1cGRhdGVfZmlsZV8xKCkgYnV0IEkgd29ycnkgaXQnbGwgZ2V0IG1pc3NlZC4uLgoKMTk5OS0wNC0wMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBVc2UgYmNvcHkoKSB0byBjb3B5CglvdmVybGFwcGluZyBzdHJpbmdzLCByYXRoZXIgdGhhbiBzdHJjcHkoKS4gIElTTyBDIHNheXMgdGhlIGxhdHRlcgoJaXMgdW5kZWZpbmVkLiAgRm91bmQgdGhpcyBpbiBhIGJ1ZyByZXBvcnQgZnJvbSAxOTk2ISAgT3VjaCEKCjE5OTktMDMtMzEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZGxpbmUpOiBJZ25vcmUgY2FycmlhZ2UgcmV0dXJucyBhdCB0aGUgZW5kIG9mIHRoZQoJbGluZSwgdG8gYWxsb3cgV2luZG93cy15IENSTEYgbGluZSB0ZXJtaW5hdG9ycy4KCjE5OTktMDMtMzAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgcHV0IGJ1aWxkLnNoIGhlcmUsIHNpbmNlIGJ1aWxkLnNoLmluIGRvZXNuJ3QKCWV4aXN0IGluaXRpYWxseS4gIFRoaXMgY2F1c2UgYXV0b3JlY29uZiBhbmQgYXV0b21ha2UgdG8gZmFpbCB3aGVuCglydW4gb24gYSBjbGVhbiBDVlMgY2hlY2tvdXQuICBJbnN0ZWFkLCB3ZSBjcmVhdGUgYnVpbGQuc2ggaW4gdGhlCglNYWtlZmlsZSAoc2VlIGJlbG93KS4KCgkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgQlVJTFRfU09VUkNFUzsgdGhpcyBpcyBubyBsb25nZXIgcmVsZXZhbnQuCglQdXQgdGhvc2UgZmlsZXMgZGlyZWN0bHkgaW50byBFWFRSQV9ESVNUIHNvIHRoZXkncmUgZGlzdHJpYnV0ZWQuCglDcmVhdGUgYSBsb2NhbCBidWlsZCBydWxlIHRvIGNyZWF0ZSBidWlsZC5zaC4KCUNyZWF0ZSBhIGxvY2FsIG1haW50YWluZXItY2xlYW4gcnVsZSB0byBkZWxldGUgYWxsIHRoZSBmdW5reQoJbWFpbnRhaW5lcnMgZmlsZXMuCgoJKiBtYWludE1ha2VmaWxlOiBNYWtlZmlsZS5pbiBkZXBlbmRzIG9uIFJFQURNRSwgc2luY2UgYXV0b21ha2UKCWZhaWxzIGlmIGl0IGRvZXNuJ3QgZXhpc3QuICBBbHNvIGRvbid0IHJlbW92ZSBnbG9iL01ha2VmaWxlLmluCgloZXJlLCBhcyBpdCBjYXVzZXMgcHJvYmxlbXMuCgoxOTk5LTAzLTI2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IFN1YnN0aXR1dGUgR0xPQkxJQiBpZiB3ZSBuZWVkIHRoZSBsaW5rIHRoZQoJZ2xvYi9saWJnbG9iLmEgbGlicmFyeS4KCSogTWFrZWZpbGUuYW0gKG1ha2VfTERBREQpOiBVc2UgdGhlIHN1YnN0IHZhcmlhYmxlIEdMT0JMSUIgc28gd2UKCWRvbid0IGxpbmsgdGhlIGxvY2FsIGxpYmdsb2IuYSBhdCBhbGwgaWYgd2UgZG9uJ3QgbmVlZCBpdC4KCSogYnVpbGQudGVtcGxhdGU6IERvbid0IGNvbXBpbGUgZ2xvYi8qLm8gdW5sZXNzIHdlIHdhbnQgZ2xvYmxpYi4KCSogbWFpbnRNYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBTdWJzdGl0dXRlIHRoZSBnbG9iLyoubyBmaWxlcwoJc2VwYXJhdGVseS4KCjE5OTktMDMtMjUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbzogVmFyaW91cyB0eXBvcyBhbmQgYWRkaXRpb25zLCBwb2ludGVkIG91dCBieSBKYW1lcwoJRy4gU2FjayA8anNhY2tAZG9ybmZlbGQuY29tPi4KCjE5OTktMDMtMjIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoRnVuY3Rpb25zKTogQWRkIGEgbmV3IHNlY3Rpb24gZG9jdW1lbnRpbmcgdGhlIG5ldwoJJChlcnJvciAuLi4pIGFuZCAkKHdhcm5pbmcgLi4uKSBmdW5jdGlvbnMuICBBbHNvIHVwZGF0ZWQgY29weXJpZ2h0CglkYXRlcy4KCSogTkVXUzogVXBkYXRlZCBmb3IgdGhlIG5ldyBmdW5jdGlvbnMuCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfZXJyb3IpOiBJbXBsZW1lbnQgdGhlIG5ldyAkKGVycm9yIC4uLikgYW5kCgkkKHdhcm5pbmcgLi4uKSBmdW5jdGlvbnMuCgkoZnVuY3Rpb25fdGFibGUpOiBJbnNlcnQgbmV3IGZ1bmN0aW9ucyBpbnRvIHRoZSB0YWJsZS4KCShmdW5jX2ZpcnN0d29yZCk6IERvbid0IGNhbGwgZmluZF9uZXh0X3Rva2VuKCkgd2l0aCBhcmd2WzBdCglpdHNlbGYsIHNpbmNlIHRoYXQgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHBvaW50ZXIuCgkqIGZ1bmN0aW9uLmM6IENsZWFudXBzIGFuZCBzbGlnaHQgY2hhbmdlcyB0byB0aGUgbmV3IG1ldGhvZCBvZgoJY2FsbGluZyBmdW5jdGlvbnMuCgoxOTk5LTAzLTIwICBIYW4tV2VuIE5pZW5odXlzICA8aGFud2VuQGNzLnV1Lm5sPgoKCSogZnVuY3Rpb24uYzogUmV3cml0ZSB0byB1c2Ugb25lIEMgZnVuY3Rpb24gcGVyIG1ha2UgZnVuY3Rpb24sCglpbnN0ZWFkIG9mIGEgaHVnZSBzd2l0Y2ggc3RhdGVtZW50LiAgQWxzbyBhbGxvd3Mgc29tZSBjbGVhbnVwIG9mCgltdWx0aS1hcmNoaXRlY3R1cmUgaXNzdWVzLCBhbmQgYSBjbGVhbmVyIEFQSSB3aGljaCBtYWtlcyB0aGluZ3MKCWxpa2UgZnVuY19hcHBseSgpIHNpbXBsZS4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfYXBwbHkpOiBJbml0aWFsIGltcGxlbWVudGF0aW9uLiAgRXhwYW5kIGVpdGhlcgoJYSBidWlsdGluIGZ1bmN0aW9uIG9yIGEgbWFrZSB2YXJpYWJsZSBpbiB0aGUgY29udGV4dCBvZiBzb21lCglhcmd1bWVudHMsIHByb3ZpZGVkIGFzICQxLCAkMiwgLi4uICROLgoKMTk5OS0wMy0xOSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KMTk5OS0wMy0xOSAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAZGV2LnRpdm9saS5jb20+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IERvbid0IHRyZWF0IF9hbGxfCgliYWNrc2xhc2hlcyBhcyBlc2NhcGVzLCBvbmx5IHRob3NlIHdoaWNoIHJlYWxseSBlc2NhcGUgYSBzcGVjaWFsCgljaGFyYWN0ZXIuICBUaGlzIGFsbG93cyBtb3N0IG5vcm1hbCAiXCIgZGlyZWN0b3J5IHNlcGFyYXRvcnMgdG8gYmUKCXRyZWF0ZWQgbm9ybWFsbHkuCgoxOTk5LTAzLTA1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBhIHN5c3RlbSBzdHJkdXAoKS4KCSogbWlzYy5jICh4c3RyZHVwKTogQ3JlYXRlZC4gIFN1Z2dlc3Rpb24gYnkgSGFuLVdlbiBOaWVuaHV5cwoJPGhhbndlbkBjcy51dS5ubD4uCgkqIG1ha2UuaDogUHJvdG90eXBlIHhzdHJkdXAoKS4KCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogVXNlIGl0LgoJKiBtYWluLmMgKG1haW4pOiBVc2UgaXQuCgkoZmluZF9hbmRfc2V0X2RlZmF1bHRfc2hlbGwpOiBVc2UgaXQuCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVXNlIGl0LgoJKiBkaXIuYyAoZmluZF9kaXJlY3RvcnkpOiBVc2UgaXQuCgoJKiBNYWtlZmlsZS5hbSwgY29uZmlndXJlLmluOiBVc2UgQUNfU1VCU1RfRklMRSB0byBpbnNlcnQgdGhlCgltYWludE1ha2VmaWxlIGluc3RlYWQgb2YgImluY2x1ZGUiLCB0byBhdm9pZCBhdXRvbWFrZSAxLjQKCWluY29tcGF0aWJpbGl0eS4KCjE5OTktMDMtMDQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGFtaWdhLmMsIGFtaWdhLmgsIGFyLmMsIGFyc2Nhbi5jLCBjb21tYW5kcy5jLCBjb21tYW5kcy5oLAoJKiBkZWZhdWx0LmMsIGRlcC5oLCBkaXIuYywgZXhwYW5kLmMsIGZpbGUuYywgZmlsZWRlZi5oLCBmdW5jdGlvbi5jLAoJKiBpbXBsaWNpdC5jLCBqb2IuYywgam9iLmgsIG1haW4uYywgbWFrZS5oLCBtaXNjLmMsIHJlYWQuYywgcmVtYWtlLmMKCSogcmVtb3RlLWNzdG1zLmMsIHJlbW90ZS1zdHViLmMsIHJ1bGUuaCwgdmFyaWFibGUuYywgdmFyaWFibGUuaCwKCSogdnBhdGguYywgTWFrZWZpbGUuYW1pLCBOTWFrZWZpbGUudGVtcGxhdGUsIGJ1aWxkLnRlbXBsYXRlLAoJKiBtYWtlZmlsZS52bXM6IFVwZGF0ZWQgRlNGIGFkZHJlc3MgaW4gdGhlIGNvcHlyaWdodCBub3RpY2UuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IElmIHdlIHNlZSBhIGNvbmRpdGlvbmFsCgl2YXJpYWJsZSBhbmQgd2UgZGVjaWRlIHRvIHNldCBpdCwgcmUtdHlwZSBpdCBhcyByZWN1cnNpdmUgc28gaXQKCXdpbGwgYmUgZXhwYW5kZWQgcHJvcGVybHkgbGF0ZXIuCgoxOTk5LTAyLTIyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBORVdTOiBNZW50aW9uIG5ldyAuTElCUEFUVEVSTlMgZmVhdHVyZS4KCgkqIG1ha2UudGV4aW5mbyAoTGlicmFyaWVzL1NlYXJjaCk6IERlc2NyaWJlIHRoZSB1c2UgYW5kCglyYW1pZmljYXRpb25zIG9mIHRoZSBuZXcgLkxJQlBBVFRFUk5TIHZhcmlhYmxlLgoKCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogSW5zdGVhZCBvZiBzZWFyY2hpbmcgb25seSBmb3IgdGhlCgloYXJkY29kZWQgZXhwYW5zaW9uICJsaWJYLmEiIGZvciBhIGxpYnJhcnkgcmVmZXJlbmNlICItbFgiLCB3ZQoJb2J0YWluIGEgbGlzdCBvZiBwYXR0ZXJucyBmcm9tIHRoZSAuTElCUEFUVEVSTlMgdmFyaWFibGUgYW5kCglzZWFyY2ggdGhvc2UgaW4gb3JkZXIuCgoJKiBkZWZhdWx0LmM6IEFkZGVkIGEgbmV3IGRlZmF1bHQgdmFyaWFibGUgLkxJQlBBVFRFUk5TLiAgVGhlCglkZWZhdWx0IGZvciBVTklYIGlzICJsaWIlLnNvIGxpYiUuYSIuICBBbWlnYSBhbmQgRE9TIHZhbHVlcyBhcmUKCWFsc28gcHJvdmlkZWQuCgoJKiByZWFkLmM6IFJlbW92ZSBib2d1cyBIQVZFX0dMT0JfSCByZWZlcmVuY2VzOyBhbHdheXMgaW5jbHVkZQoJdmFuaWxsYSBnbG9iLmguCgoxOTk5LTAyLTIxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiBTZXQgdmFsdWUgdG8gMCB0byBhdm9pZCBmcmVlaW5nIGl0LgoJKiB2YXJpYWJsZS5jIChwb3BfdmFyaWFibGVfc2NvcGUpOiBGcmVlIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuCgkodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBGb3Igc2ltcGxlIHZhcmlhYmxlcywgdXNlCglhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kKCkgdG8gYXZvaWQgc3RvbXBpbmcgb24gdGhlIHZhcmlhYmxlCglidWZmZXIgd2hlbiB3ZSBzdGlsbCBuZWVkIGl0IGZvciBvdGhlciB0aGluZ3MuCgoJKiBhcnNjYW4uYzogTW9kaWZpZWQgdG8gc3VwcG9ydCBBSVggNC4zIGJpZyBhcmNoaXZlcy4gIFRoZSBjaGFuZ2VzCglhcmUgYmFzZWQgb24gaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgUGhpbCBBZGFtcwoJPHBhZGFtc0BhdXN0aW4uaWJtLmNvbT4uCgoxOTk5LTAyLTE5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIHRvIHNlZSBpZiB0aGUgR05VIGdsb2IgbGlicmFyeSBpcyBhbHJlYWR5CglpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4gIElmIHNvLCBfZG9uJ3RfIGFkZCAtSS4vZ2xvYiB0byB0aGUKCWNvbXBpbGUgbGluZS4gIFVzaW5nIHRoZSBzeXN0ZW0gZ2xvYiBjb2RlIHdpdGggdGhlIGxvY2FsIGhlYWRlcnMKCWlzIHZlcnkgYmFkIG1vam8hCglSZXdyaXRlIFNDQ1MgbWFjcm9zIHRvIHVzZSBtb3JlIGF1dG9jb25mIGZhY2lsaXRpZXMuCgoJKiBNYWtlZmlsZS5hbTogTW92ZSAtSWdsb2Igb3V0IG9mIElOQ0xVREVTOyBpdCdsbCBnZXQgYWRkZWQgdG8KCUNQUEZMQUdTIGJ5IGNvbmZpZ3VyZSBub3cuCglBdXRvbWFrZSAxLjQgaW50cm9kdWNlZCBpdHMgb3duICJpbmNsdWRlIiBmZWF0dXJlIHdoaWNoIGNvbmZsaWN0cwoJd2l0aCB0aGUgbWFpbnRNYWtlZmlsZSBzdHVmZi4gIEEgaGFjayB0aGF0IHNlZW1zIHRvIHdvcmsgaXMgYWRkIGEKCXNwYWNlIGJlZm9yZSB0aGUgaW5jbHVkZSA6LS8uCgoJKiBidWlsZC50ZW1wbGF0ZTogTW92ZSAtSWdsb2Igb3V0IG9mIHRoZSBjb21waWxlIGxpbmU7IGl0J2xsIGdldAoJYWRkZWQgdG8gQ1BQRkxBR1MgYnkgY29uZmlndXJlIG5vdy4KCjE5OTktMDItMTYgIEdsZW5uIEQuIFdvbGYgIDxHbGVubl9Xb2xmQGVtYWlsLnNwcy5tb3QuY29tPgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pIFtWTVNdOiBJbml0aWFsaXplZCBWTVNfbWVtYmVyX2RhdGUgYmVmb3JlCgljYWxsaW5nIGxiciRnZXRfaW5kZXggc2luY2UgaWYgdGhlIGFyY2hpdmUgaXMgZW1wdHksCglWTVNfZ2V0X21lbWJlcl9pbmZvIHdvbid0IGdldCBjYWxsZWQgYXQgYWxsLCBhbmQgYW55IGxlZnRvdmVyIGRhdGUKCXdpbGwgYmUgdXNlZC4gIFRoaXMgYnVnIHNob3dzIHVwIGlmIGFueSBtZW1iZXIgb2YgYW55IGFyY2hpdmUgaXMKCW1hZGUsIGZvbGxvd2VkIGJ5IGEgZGVwZW5kZW5jeSBjaGVjayBvbiBhIGRpZmZlcmVudCwgZW1wdHkKCWFyY2hpdmUuCgoxOTk4LTEyLTEzICBNYXJ0aW4gWmluc2VyICA8emluc2VyQGRlY3VzLmRlY3VzLmRlPgoKCSogY29uZmlnLmgtdm1zIFtWTVNdOiBTZXQgX1BPU0lYX0NfU09VUkNFLiAgUmVkZWZpbmUgdGhlIGdldG9wdAoJZnVuY3Rpb25zIHNvIHdlIGRvbid0IHVzZSB0aGUgYnJva2VuIFZNUyB2ZXJzaW9ucy4KCSogbWFrZWZpbGUuY29tIFtWTVNdOiBBbGxvdyBkZWJ1Z2dpbmcuCgkqIGRpci5jIChkaXJfc2V0dXBfZ2xvYikgW1ZNU106IERvbid0IGV4dGVybiBzdGF0KCkgb24gVk1TLgoKMTk5OC0xMS0zMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogc2lnbmFtZS5jIChpbml0X3NpZyk6IENoZWNrIHRoZSBzaXplcyBvZiBzaWduYWxzIGJlaW5nIHNldCB1cCB0bwoJYXZvaWQgYXJyYXkgb3ZlcndyaXRlcyAoaWYgdGhlIHN5c3RlbSBoZWFkZXJzIGhhdmUgcHJvYmxlbXMpLgoKMTk5OC0xMS0xNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBDbGVhbiB1cCBzb21lIGluZGVudGF0aW9uLgoKMTk5OC0xMS0wOCAgSGFuLVdlbiBOaWVuaHV5cyAgPGhhbndlbkBjcy51dS5ubD4KCgkqIHJ1bGUuYyAocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBGaXggYXJndW1lbnRzIHRvIGZhdGFsKCkgY2FsbC4KCjE5OTgtMTAtMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IElmIHRoZSBjb21tYW5kIGxpc3QgcmVzb2x2ZXMgdG8gbm8KCWNoYXJzIGF0IGFsbCAoZS5nLjogImZvbzo7JChlbXB0eSkiKSB0aGVuIGNvbW1hbmRfcHRyIGlzIE5VTEw7CglxdWl0IGVhcmx5LgoKMTk5OC0xMC0xMiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogcnVsZS5jIChwcmludF9ydWxlX2RhdGFfYmFzZSk6IElnbm9yZSBudW1fcGF0dGVybl9ydWxlcyBpZiBpdCBpcwoJemVyby4KCjE5OTgtMTAtMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEFsbG93IG5vbi1lbXB0eSBsaW5lcyB0byBleHBhbmQgdG8gdGhlCgllbXB0eSBzdHJpbmcgYWZ0ZXIgdmFyaWFibGUsIGV0Yy4sIGV4cGFuc2lvbiwgYW5kIGJlIGlnbm9yZWQuCgoxOTk4LTA5LTIxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IE9ubHkgYWRkIENPTU1BTkQuQ09NCgkiQGVjaG8gb2ZmIiBsaW5lIGZvciBub24tVU5JWHkgc2hlbGxzLgoKMTk5OC0wOS0wOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYzogQWRkIGluIG1pc3NpbmcgSEFWRV9NS1NfU0hFTEwgdGVzdHMuCgoxOTk4LTA5LTA0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJZiB3ZSBoaXQgdGhlICJtaXNzaW5nIHNlcGFyYXRvciIgZXJyb3IsCgljaGVjayBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDggc3BhY2VzIGluc3RlYWQgb2YgYSBUQUIgYW5kIGdpdmUgYW4KCWV4dHJhIGNvbW1lbnQgdG8gaGVscCBwZW9wbGUgb3V0LgoKMTk5OC0wOC0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBjb25maWd1cmUuaW4gKEFDX1NUUlVDVF9TVF9NVElNX05TRUMpOgoJUmVuYW1lZCBmcm9tIEFDX1NUUlVDVF9TVF9NVElNLgoKCSogYWNpbmNsdWRlLm00IChBQ19TVFJVQ1RfU1RfTVRJTV9OU0VDKTogIExpa2V3aXNlLgoJUG9ydCB0byBVbml4V2FyZSAyLjEuMiBhbmQgcGVkYW50aWMgU29sYXJpcyAyLjYuCgoJKiBhY2NvbmZpZy5oIChTVF9NVElNX05TRUMpOgoJUmVuYW1lZCBmcm9tIEhBVkVfU1RfTVRJTSwgd2l0aCBhIG5ldyBtZWFuaW5nLgoKCSogZmlsZWRlZi5oIChGSUxFX1RJTUVTVEFNUF9GUk9NX1NfQU5EX05TKToKCVVzZSBuZXcgU1RfTVRJTV9OU0VDIG1hY3JvLgoKMTk5OC0wOC0yNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKGNoZWNrX2RlcCk6IEZvciBhbnkgaW50ZXJtZWRpYXRlIGZpbGUsIG5vdCBqdXN0CglzZWNvbmRhcnkgb25lcywgdHJ5IGltcGxpY2l0IGFuZCBkZWZhdWx0IHJ1bGVzIGlmIG5vIGV4cGxpY2l0CglydWxlcyBhcmUgZ2l2ZW4uICBJJ20gbm90IHN1cmUgd2h5IHRoaXMgd2FzIHJlc3RyaWN0ZWQgdG8KCXNlY29uZGFyeSBydWxlcyBpbiB0aGUgZmlyc3QgcGxhY2UuCgoxOTk4LTA4LTI0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKFNwZWNpYWwgVGFyZ2V0cyk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGZvcgoJLklOVEVSTUVESUFURTogaWYgdXNlZCB3aXRoIG5vIGRlcGVuZGVuY2llcywgdGhlbiBpdCBkb2VzIG5vdGhpbmc7CglvbGQgZG9jcyBzYWlkIGl0IG1hcmtlZCBhbGwgdGFyZ2V0cyBhcyBpbnRlcm1lZGlhdGUsIHdoaWNoIGl0CglkaWRuJ3QuLi4gYW5kIHdoaWNoIHdvdWxkIGJlIHNpbGx5IDopLgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBJZiB3ZSBmaW5kIGEgZGVwZW5kZW5jeSBpbiBvdXIKCWludGVybmFsIHRhYmxlcywgbWFrZSBzdXJlIGl0J3Mgbm90IG1hcmtlZCBpbnRlcm1lZGlhdGUgYmVmb3JlCglhY2NlcHRpbmcgaXQgYXMgYSBmb3VuZF9maWxlW10uCgoxOTk4LTA4LTIwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBhci5jIChhcl9nbG9iKTogVXNlIGV4aXN0aW5nIGFscGhhX2NvbXBhcmUoKSB3aXRoIHFzb3J0LgoJKGFyX2dsb2JfYWxwaGFjb21wYXJlKTogUmVtb3ZlIGl0LgoKCU1vZGlmeSBQYXVsIEVnZ2VydCdzIHBhdGNoIHNvIHdlIGRvbid0IGFiYW5kb24gb2xkZXIgc3lzdGVtczoKCgkqIGNvbmZpZ3VyZS5pbjogV2FybiB0aGUgdXNlciBpZiBuZWl0aGVyIHdhaXRwaWQoKSBub3Igd2FpdDMoKSBpcwoJYXZhaWxhYmxlLgoKCSogam9iLmMgKFdBSVRfTk9IQU5HKTogRG9uJ3Qgc3ludGF4IGVycm9yIG9uIGFuY2llbnQgaG9zdHMuCgkoY2hpbGRfaGFuZGxlciwgZGVhZF9jaGlsZHJlbik6IERlZmluZSB0aGVzZSBpZiBXQUlUX05PSEFORyBpcyBub3QKCWF2YWlsYWJsZS4KCShyZWFwX2NoaWxkcmVuKTogT25seSB0cmFjayB0aGUgZGVhZF9jaGlsZHJlbiBjb3VudCBpZiBubwoJV0FJVF9OT0hBTkcuICBPdGhlcndpc2UsIGl0J3MgYSBib29sZWFuLgoKCSogbWFpbi5jIChtYWluKTogQWRkIGJhY2sgc2lnbmFsIGhhbmRsZXIgaWYgbm8gV0FJVF9OT0hBTkcgaXMKCWF2YWlsYWJsZTsgb25seSB1c2UgZGVmYXVsdCBzaWduYWwgaGFuZGxlciBpZiBpdCBpcy4KCjE5OTgtMDgtMjAgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCUluc3RhbGwgYSBtb3JlIHJvYnVzdCBzaWduYWwgaGFuZGxpbmcgbWVjaGFuaXNtIGZvciBzeXN0ZW1zIHdoaWNoCglzdXBwb3J0IGl0LgoKCSogam9iLmMgKFdBSVRfTk9IQU5HKTogRGVmaW5lIHRvIGEgc3ludGF4IGVycm9yIGlmIG91ciBob3N0CglpcyB0cnVseSBhbmNpZW50OyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCgkoY2hpbGRfaGFuZGxlciwgZGVhZF9jaGlsZHJlbik6IFJlbW92ZS4KCShyZWFwX2NoaWxkcmVuKTogRG9uJ3QgdHJ5IHRvIGtlZXAgc2VwYXJhdGUgdHJhY2sgb2YgaG93IG1hbnkKCWRlYWQgY2hpbGRyZW4gd2UgaGF2ZSwgYXMgdGhpcyBpcyB0b28gYnVnLXByb25lLgoJSnVzdCBhc2sgdGhlIE9TIGluc3RlYWQuCgkodm1zSGFuZGxlQ2hpbGRUZXJtKTogRml4IHR5cG8gaW4gZXJyb3IgbWVzc2FnZTsgZG9uJ3QgbWVudGlvbgoJY2hpbGRfaGFuZGxlci4KCgkqIG1haW4uYyAobWFpbik6IE1ha2Ugc3VyZSB3ZSdyZSBub3QgaWdub3JpbmcgU0lHQ0hMRC9TSUdDTEQ7CglkbyB0aGlzIGVhcmx5LCBiZWZvcmUgd2UgY291bGQgcG9zc2libHkgY3JlYXRlIGEgc3VicHJvY2Vzcy4KCUp1c3QgdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yOyBkb24ndCBoYXZlIG91ciBvd24gaGFuZGxlci4KCjE5OTgtMDgtMTggIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpIFtfX01TRE9TX18sIFdJTkRPV1MzMl06IEFkZCBjb2RlIHRvCglyZWNvZ25pemUgbGlicmFyeSBhcmNoaXZlIG1lbWJlcnMgd2hlbiBkZWFsaW5nIHdpdGggZHJpdmUgc3BlYwoJbWVzcy4gIERpc2NvdmVyeSBhbmQgaW5pdGlhbCBmaXggYnkgR2VvcmdlIFJhY3ogPGdyYWN6QG1pbmNvbS5jb20+LgoKMTk5OC0wOC0xOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3RkbGliLmggZXhwbGljaXRseSAoc29tZSBob3N0cyBoYXZlIGl0CglidXQgZG9uJ3QgaGF2ZSBTVERDX0hFQURFUlMpLgoJKiBtYWtlLmg6IFVzZSBIQVZFX1NURExJQl9ILiAgQ2xlYW4gdXAgc29tZSAjZGVmaW5lcy4KCSogY29uZmlnLmFtaTogUmUtY29tcHV0ZSBiYXNlZCBvbiBuZXcgY29uZmlnLmguaW4gY29udGVudHMuCgkqIGNvbmZpZy5oLXZtczogRGl0dG8uCgkqIGNvbmZpZy5oLlczMjogRGl0dG8uCgkqIGNvbmZpZ2guZG9zOiBEaXR0by4KCgkqIGRpci5jIChmaW5kX2RpcmVjdG9yeSkgW1dJTkRPV1MzMl06IFdpbmRvd3Mgc3RhdCgpIGZhaWxzIGlmCglkaXJlY3RvcnkgbmFtZXMgZW5kIHdpdGggYFwnIHNvIHN0cmlwIGl0LgoKMTk5OC0wOC0xNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvOiBBZGRlZCBjb3B5cmlnaHQgeWVhciB0byB0aGUgcHJpbnRlZCBjb3B5LiAgUmVtb3ZlZAoJdGhlIHByaWNlIGZyb20gdGhlIG1hbnVhbC4gIENoYW5nZSB0aGUgdG9wLWxldmVsIHJlZmVyZW5jZSB0bwoJcnVubmluZyBtYWtlIHRvIGJlICJJbnZva2luZyBtYWtlIiBpbnN0ZWFkIG9mICJtYWtlIEludm9jYXRpb24iLAoJdG8gY29tcGx5IHdpdGggR05VIGRvYyBzdGFuZGFyZHMuCgoJKiBtYWtlLmggKF9fZm9ybWF0X18sIF9fcHJpbnRmX18pOiBBZGRlZCBzdXBwb3J0IGZvciB0aGVzZSBpbgoJX19hdHRyaWJ1dGVfXyBtYWNyby4KCShtZXNzYWdlLCBlcnJvciwgZmF0YWwpOiBVc2UgLi4uIHByb3RvdHlwZSBmb3JtIHVuZGVyIF9fU1REQ19fLgoJQWRkIF9fZm9ybWF0X18gYXR0cmlidXRlcyBmb3IgcHJpbnRmLXN0eWxlIGZ1bmN0aW9ucy4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfRlVOQ19WUFJJTlRGKTogQ2hlY2sgZm9yIHZwcmludGYoKS9fZG9wcm50KCkuCgoJKiBtaXNjLmMgKG1lc3NhZ2UsIGVycm9yLCBmYXRhbCk6IEFkZCBwcmVwcm9jZXNzb3Igc3R1ZmYgdG8gZW5hYmxlCgljcmVhdGlvbiBvZiB2YXJpYWJsZS1hcmd1bWVudCBmdW5jdGlvbnMgd2l0aCBhcHByb3ByaWF0ZQoJcHJvdG90eXBlcywgdGhhdCB3b3JrcyB3aXRoIEFOU0ksIHByZS1BTlNJLCB2YXJhcmdzLmgsIHN0ZGFyZy5oLAoJdipwcmludGYoKSwgX2RvcHJudCgpLCBvciBub25lIG9mIHRoZSBhYm92ZS4gIEN1bGxlZCBmcm9tIEdOVQoJZmlsZXV0aWxzIGFuZCBzbGlnaHRseSBtb2RpZmllZC4KCShtYWtlZmlsZV9lcnJvciwgbWFrZWZpbGVfZXJyb3IpOiBSZW1vdmVkIChtZXJnZWQgaW50byBlcnJvcigpIGFuZAoJZmF0YWwoKSwgcmVzcGVjdGl2ZWx5KS4KCSogYW1pZ2EuYzogVXNlIHRoZW0uCgkqIGFyLmM6IFVzZSB0aGVtLgoJKiBhcnNjYW4uYzogVXNlIHRoZW0uCgkqIGNvbW1hbmRzLmM6IFVzZSB0aGVtLgoJKiBleHBhbmQuYzogVXNlIHRoZW0uCgkqIGZpbGUuYzogVXNlIHRoZW0uCgkqIGZ1bmN0aW9uLmM6IFVzZSB0aGVtLgoJKiBqb2IuYzogVXNlIHRoZW0uCgkqIG1haW4uYzogVXNlIHRoZW0uCgkqIG1pc2MuYzogVXNlIHRoZW0uCgkqIHJlYWQuYzogVXNlIHRoZW0uCgkqIHJlbWFrZS5jOiBVc2UgdGhlbS4KCSogcmVtb3RlLWNzdG1zLmM6IFVzZSB0aGVtLgoJKiBydWxlLmM6IFVzZSB0aGVtLgoJKiB2YXJpYWJsZS5jOiBVc2UgdGhlbS4KCgkqIG1ha2UuaCAoc3RydWN0IGZsb2MpOiBOZXcgc3RydWN0dXJlIHRvIHN0b3JlIGZpbGUgbG9jYXRpb24KCWluZm9ybWF0aW9uLgoJKiBjb21tYW5kcy5oIChzdHJ1Y3QgY29tbWFuZHMpOiBVc2UgaXQuCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogVXNlIGl0LgoJKiBjb21tYW5kcy5jOiBVc2UgaXQuCgkqIGRlZmF1bHQuYzogVXNlIGl0LgoJKiBmaWxlLmM6IFVzZSBpdC4KCSogZnVuY3Rpb24uYzogVXNlIGl0LgoJKiBtaXNjLmM6IFVzZSBpdC4KCSogcmVhZC5jOiBVc2UgaXQuCgkqIHJ1bGUuYzogVXNlIGl0LgoKMTk5OC0wOC0xNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBmaWxlZGVmLmggKEZJTEVfVElNRVNUQU1QX1BSSU5UX0xFTl9CT1VORCk6IEFkZCAxMCwgZm9yIG5hbm9zZWNvbmRzLgoKMTk5OC0wOC0xNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBmaWxlZGVmLmggKEZMT09SX0xPRzJfU0VDT05EU19QRVJfWUVBUik6IE5ldyBtYWNyby4KCShGSUxFX1RJTUVTVEFNUF9QUklOVF9MRU5fQk9VTkQpOiBUaWdodGVuIGJvdW5kLCBhbmQgdHJ5IHRvCgltYWtlIGl0IGVhc2llciB0byB1bmRlcnN0YW5kLgoKMTk5OC0wOC0xNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogV2UndmUgYWxyZWFkeSB1bnF1b3RlZCBhbnkgY29sb24gY2hhcnMKCWJ5IHRoZSB0aW1lIHdlJ3JlIGRvbmUgcmVhZGluZyB0aGUgdGFyZ2V0cywgc28gYXJyYW5nZSBmb3IKCXBhcnNlX2ZpbGVfc2VxKCkgb24gdGhlIHRhcmdldCBsaXN0IHRvIG5vdCBkbyBzbyBhZ2Fpbi4KCjE5OTgtMDgtMDUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgZ2xvYi9jb25maWd1cmUuaW4gZGF0YS4gIFdlJ2xsIGhhdmUgdGhlIGdsb2IKCWNvZGUgaW5jbHVkZSB0aGUgcmVndWxhciBtYWtlIGNvbmZpZy5oLCByYXRoZXIgdGhhbiBjcmVhdGluZyBpdHMKCW93bi4KCgkqIGdldGxvYWRhdmcuYyAobWFpbik6IENoYW5nZSByZXR1cm4gdHlwZSB0byBpbnQuCgoxOTk4LTA4LTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogSWdub3JlIHVua25vd24gY2hpbGRyZW4uCgoxOTk4LTA3LTMxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLmgsIGZpbGVkZWYuaCwgZGVwLmgsIHJ1bGUuaCwgY29tbWFuZHMuaCwgcmVtYWtlLmM6CglBZGQgcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zLiAgU29tZSBwcm90b3R5cGVzIG5lZWRlZCB0byBiZSBtb3ZlZAoJaW4gb3JkZXIgdG8gZ2V0ICNpbmNsdWRlIG9yZGVyIHJlYXNvbmFibGUuCgoxOTk4LTA3LTMwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLmg6IEFkZGVkIE1JTi9NQVguCgkqIGZpbGVkZWYuaDogVXNlIHRoZW07IHJlbW92ZSBGSUxFX1RJTUVTVEFNUF9NSU4uCgoxOTk4LTA3LTMwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCiAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHN1Yi1zZWNvbmQgdGltZXN0YW1wIHJlc29sdXRpb24gb24gaG9zdHMgdGhhdAogICAgICAgIHN1cHBvcnQgaXQgKGp1c3QgU29sYXJpcyAyLjYsIHNvIGZhcikuCgoJKiBhY2NvbmZpZy5oIChIQVZFX1NUX01USU0sIHVpbnRtYXhfdCk6IE5ldyB1bmRlZnMuCgkqIGFjaW5jbHVkZS5tNCAoam1fQUNfSEVBREVSX0lOVFRZUEVTX0gsIEFDX1NUUlVDVF9TVF9NVElNLAogICAgICAgIGptX0FDX1RZUEVfVUlOVE1BWF9UKTogTmV3IGRlZnVucy4KCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IENvbnZlcnQgZmlsZSB0aW1lc3RhbXAgdG8KICAgICAgICBzZWNvbmRzIGJlZm9yZSBjb21wYXJpbmcgdG8gYXJjaGl2ZSB0aW1lc3RhbXAuICBFeHRyYWN0IG1vZAogICAgICAgIHRpbWUgZnJvbSBzdHJ1Y3Qgc3RhdCB1c2luZyBGSUxFX1RJTUVTVEFNUF9TVEFUX01PRFRJTUUuCgkqIGNvbmZpZ3VyZS5pbiAoQ19TVFJVQ1RfU1RfTVRJTSwgam1fQUNfVFlQRV9VSU5UTUFYX1QpOiBBZGQuCiAgICAgICAgKEFDX0NIRUNLX0xJQiwgQUNfQ0hFQ0tfRlVOQ1MpOiBBZGQgY2xvY2tfZ2V0dGltZS4KCSogZmlsZS5jIChzbmFwX2RlcHMpOiBVc2UgRklMRV9USU1FU1RBTVAsIG5vdCB0aW1lX3QuCiAgICAgICAgKGZpbGVfdGltZXN0YW1wX25vdywgZmlsZV90aW1lc3RhbXBfc3ByaW50Zik6IE5ldyBmdW5jdGlvbnMuCiAgICAgICAgKHByaW50X2ZpbGUpOiBQcmludCBmaWxlIHRpbWVzdGFtcHMgYXMgRklMRV9USU1FU1RBTVAsIG5vdAogICAgICAgIHRpbWVfdC4KCSogZmlsZWRlZi5oOiBJbmNsdWRlIDxpbnR0eXBlcy5oPiBpZiBhdmFpbGFibGUgYW5kIGlmIEhBVkVfU1RfTVRJTS4KICAgICAgICAoRklMRV9USU1FU1RBTVAsIEZJTEVfVElNRVNUQU1QX1NUQVRfTU9EVElNRSwgRklMRV9USU1FU1RBTVBfTUlOLAogICAgICAgIEZJTEVfVElNRVNUQU1QU19QRVJfUywgRklMRV9USU1FU1RBTVBfRlJPTV9TX0FORF9OUywKICAgICAgICBGSUxFX1RJTUVTVEFNUF9ESVYsIEZJTEVfVElNRVNUQU1QX01PRCwgRklMRV9USU1FU1RBTVBfUywKICAgICAgICBGSUxFX1RJTUVTVEFNUF9OUywgRklMRV9USU1FU1RBTVBfUFJJTlRfTEVOX0JPVU5EKTogTmV3IG1hY3Jvcy4KICAgICAgICAoZmlsZV90aW1lc3RhbXBfbm93LCBmaWxlX3RpbWVzdGFtcF9zcHJpbnRmKTogTmV3IGRlY2xzLgogICAgICAgIChzdHJ1Y3QgZmlsZS5sYXN0X210aW1lLCBmX210aW1lLCBmaWxlX210aW1lXzEsIE5FV19NVElNRSk6CiAgICAgICAgdGltZV90IC0+IEZJTEVfVElNRVNUQU1QLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IExpa2V3aXNlLgoJKiB2cGF0aC5jICh2cGF0aF9zZWFyY2gsIHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBMaWtld2lzZS4KCSogbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgkqIHJlbWFrZS5jIChjaGVja19kZXAsIG5hbWVfbXRpbWUsIGxpYnJhcnlfc2VhcmNoLCBmX210aW1lKTogTGlrZXdpc2UuCiAgICAgICAgKGZfbXRpbWUpOiBVc2UgZmlsZV90aW1lc3RhbXBfbm93IGluc3RlYWQgb2YgYHRpbWUnLgogICAgICAgIFByaW50IGZpbGUgdGltZXN0YW1wIHdpdGggZmlsZV90aW1lc3RhbXBfc3ByaW50Zi4KCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IEV4dHJhY3QgZmlsZSB0aW1lIHN0YW1wIGZyb20KICAgICAgICBzdHJ1Y3Qgc3RhdCB3aXRoIEZJTEVfVElNRVNUQU1QX1NUQVRfTU9EVElNRS4KCjE5OTgtMDctMjggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43NyByZWxlYXNlZC4KCgkqIGRvc2J1aWxkLmJhdDogQ2hhbmdlIHRvIERPUyBDUkxGIGxpbmUgdGVybWluYXRvcnMuCgoJKiBtYWtlLXN0ZHMudGV4aTogVXBkYXRlIGZyb20gbGF0ZXN0IHZlcnNpb24uCgoJKiBtYWtlLnRleGluZm8gKE9wdGlvbnMgU3VtbWFyeSk6IENsYXJpZnkgdGhhdCB0aGUgLXIgb3B0aW9uCglhZmZlY3RzIG9ubHkgcnVsZXMsIG5vdCBidWlsdGluIHZhcmlhYmxlcy4KCjE5OTgtMDctMjcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UuaDogTWFrZSBfX2F0dHJpYnV0ZV9fIHJlc29sdmUgdG8gZW1wdHkgZm9yIG5vbi1HQ0MgX2FuZF8KCWZvciBHQ0MgcHJlLTIuNS54LgoKCSogbWlzYy5jIChsb2dfYWNjZXNzKTogUHJpbnQgVUlEL0dJRCdzIGFzIHVuc2lnbmVkIGxvbmcgaW50IGZvcgoJbWF4aW11bSBwb3J0YWJpbGl0eS4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogUHJpbnQgUElEcyBhcyBsb25nIGludCBmb3IgbWF4aW11bQoJcG9ydGFiaWxpdHkuCgoxOTk4LTA3LTI0ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogTWFrZWZpbGUuRE9TICgqX0lOU1RBTEwsICpfVU5JTlNUQUxMKTogUmVwbGFjZSBgdHJ1ZScgd2l0aCBgOicuCgoxOTk4LTA3LTI1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzYuOTQgcmVsZWFzZWQuCgoxOTk4LTA3LTIzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWcuaC5XMzIudGVtcGxhdGU6IE1ha2Ugc3VyZSBhbGwgdGhlICNkZWZpbmVzIG9mIG1hY3JvcyBoZXJlCgloYXZlIGEgdmFsdWUgKGUuZy4sIHVzZSBgYCNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxJycgaW5zdGVhZCBvZgoJanVzdCBgYCNkZWZpbmUgSEFWRV9TVFJJTkdfSCcnLiAgS2VlcHMgdGhlIHByZXByb2Nlc3NvciBoYXBweSBpbgoJc29tZSBjb250ZXh0cy4KCgkqIG1ha2UuaDogUmVtb3ZlIF9fYXR0cmlidXRlX18oKGZvcm1hdC4uLikpIHN0dWZmOyB1c2luZyBpdCB3aXRoCgl1bi1wcm90b3R5cGVkIGZ1bmN0aW9ucyBjYXVzZXMgb2xkZXIgR0NDJ3MgdG8gZmFpbC4KCgkqIFZlcnNpb24gMy43Ni45MyByZWxlYXNlZC4KCjE5OTgtMDctMjIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZpbGUuYyAocHJpbnRfZmlsZV9kYXRhX2Jhc2UpOiBGaXggYXZlcmFnZSBjYWxjdWxhdGlvbi4KCjE5OTgtMDctMjAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAoZGllKTogUG9zdHBvbmUgdGhlIGNoZGlyKCkgdW50aWwgYWZ0ZXIKCXJlbW92ZV9pbnRlcm1lZGlhdGVzKCkgc28gdGhhdCBpbnRlcm1lZGlhdGUgdGFyZ2V0cyB3aXRoIHJlbGF0aXZlCglwYXRobmFtZXMgYXJlIHJlbW92ZWQgcHJvcGVybHkuCgoxOTk4LTA3LTE3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogTmV3IGZsYWc6IGRpZCB3ZSBwcmludCBhbiBlcnJvciBvciBub3Q/CgoJKiByZW1ha2UuYyAobm9fcnVsZV9lcnJvcik6IE5ldyBmdW5jdGlvbiB0byBwcmludCBlcnJvciBtZXNzYWdlcywKCWV4dHJhY2VkIGZyb20gcmVtYWtlX2ZpbGUoKS4KCgkqIHJlbWFrZS5jIChyZW1ha2VfZmlsZSk6IEludm9rZSB0aGUgbmV3IGVycm9yIHByaW50IGZ1bmN0aW9uLgoJKHVwZGF0ZV9maWxlXzEpOiBJbnZva2UgdGhlIGVycm9yIHByaW50IGZ1bmN0aW9uIGlmIHdlIHNlZSB0aGF0IHdlCglhbHJlYWR5IHRyaWVkIHRoaXMgdGFyZ2V0IGFuZCBpdCBmYWlsZWQsIGJ1dCB0aGF0IGFuIGVycm9yIHdhc24ndAoJcHJpbnRlZCBmb3IgaXQuICBUaGlzIGNhbiBoYXBwZW4gaWYgYSBmaWxlIGlzIGluY2x1ZGVkIHdpdGgKCS1pbmNsdWRlIG9yIHNpbmNsdWRlIGFuZCBjb3VsZG4ndCBiZSBidWlsdCwgdGhlbiBsYXRlciBpcyBhbHNvCgl0aGUgZGVwZW5kZW5jeSBvZiBhbm90aGVyIHRhcmdldC4gIFdpdGhvdXQgdGhpcyBjaGFuZ2UsIG1ha2UganVzdAoJc2lsZW50bHkgc3RvcHMgOi0vLgoKMTk5OC0wNy0xNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvOiBSZW1vdmVkICJiZXRhIiB2ZXJzaW9uIGRlc2lnbmF0b3IuCglVcGRhdGVkIElTQk4gZm9yIHRoZSBuZXh0IHByaW50aW5nLgoKMTk5OC0wNy0xMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBhY2luY2x1ZGUubTQ6IE5ldyBBQ19MRlMgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIHNwZWNpYWwgY29tcGlsZXIKCWZsYWdzIGFyZSBuZWVkZWQgdG8gYWxsb3cgYWNjZXNzIHRvIGxhcmdlIGZpbGVzIChlLmcuLCBTb2xhcmlzIDIuNikuCgkqIGNvbmZpZ3VyZS5pbjogSW52b2tlIGl0LgoKMTk5OC0wNy0wOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIE1ha2VmaWxlLkRPUzogdHJhY2sgY2hhbmdlcyBpbiBNYWtlZmlsZS5pbi4KCjE5OTgtMDctMDcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbW90ZS1jc3Rtcy5jIChzdGFydF9yZW1vdGVfam9iKTogTW92ZSBnZXRob3N0YnlhZGRyKCkgdG8gdGhlCgl0b3Agc28gaG9zdCBpcyBpbml0aWFsaXplZCBlYXJseSBlbm91Z2guCgoJKiBhY2luY2x1ZGUubTQ6IE5ldyBmaWxlLiAgTmVlZCBzb21lIHNwZWNpYWwgYXV0b2NvbmYgbWFjcm9zIHRvCgljaGVjayBmb3IgbmV0d29yayBsaWJyYXJpZXMgKC1sc29ja2V0LCAtbG5zbCwgZXRjLikgd2hlbgoJY29uZmlndXJpbmcgQ3VzdG9tcy4KCgkqIGNvbmZpZ3VyZS5pbiAobWFrZV90cnlfY3VzdG9tcyk6IEludm9rZSBuZXcgbmV0d29yayBsaWJzIG1hY3JvLgoKMTk5OC0wNy0wNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc2LjkyIHJlbGVhc2VkLgoKCSogUkVBRE1FLmN1c3RvbXM6IEFkZGVkIHRvIHRoZSBkaXN0cmlidXRpb24uCgoJKiBjb25maWd1cmUuaW4gKG1ha2VfdHJ5X2N1c3RvbXMpOiBSZXdyaXRlIHRvIHJlcXVpcmUgYW4gaW5zdGFsbGVkCglDdXN0b21zIGxpYnJhcnksIHJhdGhlciB0aGFuIGxvb2tpbmcgYXQgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KCgkqIE1ha2VmaWxlLmFtIChtYW5fTUFOUyk6IEluc3RhbGwgbWFrZS4xLgoJKiBtYWtlLjE6IFJlbmFtZWQgZnJvbSBtYWtlLm1hbi4KCgkqIG1ha2UudGV4aW5mbyAoQnVncyk6IE5ldyBtYWlsaW5nIGxpc3QgYWRkcmVzcyBmb3IgR05VIG1ha2UgYnVnCglyZXBvcnRzLgoKMTk5OC0wNy0wMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc2LjkxIHJlbGVhc2VkLgoKCSogZGVmYXVsdC5jOiBBZGRlZCBkZWZhdWx0IHJ1bGUgZm9yIG5ldy1zdHlsZSBSQ1MgbWFzdGVyIGZpbGUKCXN0b3JhZ2U7IGBgJSA6OiBSQ1MvJScnLgoJQWRkZWQgZGVmYXVsdCBydWxlcyBmb3IgRE9TLXN0eWxlIEMrKyBmaWxlcyB3aXRoIHN1ZmZpeCAiLmNwcCIuCglUaGV5IHVzZSB0aGUgbmV3IExJTksuY3BwIGFuZCBDT01QSUxFLmNwcCBtYWNyb3MsIHdoaWNoIGFyZSBzZXQgYnkKCWRlZmF1bHQgdG8gYmUgZXF1YWwgdG8gTElOSy5jYyBhbmQgQ09NUElMRS5jYy4KCjE5OTgtMDYtMTkgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBSZXNldCBleGVjdXRlX2J5X3NoZWxsIGFmdGVyIGFuIGVtcHR5CiAgICAgICAgY29tbWFuZCB3YXMgc2tpcHBlZC4KCjE5OTgtMDYtMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAobWFpbik6IEtlZXAgdHJhY2sgb2YgdGhlIHRlbXBvcmFyeSBmaWxlbmFtZSBjcmVhdGVkIHdoZW4KCXJlYWRpbmcgYSBtYWtlZmlsZSBmcm9tIHN0ZGluICgtZi0pIGFuZCBhdHRlbXB0IHRvIHJlbW92ZSBpdAoJYXMgc29vbiBhcyB3ZSBrbm93IHdlJ3JlIG5vdCBnb2luZyB0byByZS1leGVjLiAgSWYgd2UgYXJlLCBhZGQgaXQKCXRvIHRoZSBleGVjJ2QgbWFrZSdzIGNtZCBsaW5lIHdpdGggIi1vIiBzbyB0aGUgZXhlYydkIG1ha2UgZG9lc24ndAoJdHJ5IHRvIHJlYnVpbGQgaXQuICBXZSBzdGlsbCBoYXZlIGEgaG9sZTogaWYgbWFrZSByZS1leGVjcyB0aGVuCgl0aGUgdGVtcG9yYXJ5IGZpbGUgd2lsbCBuZXZlciBiZSByZW1vdmVkLiAgVG8gZml4IHRoaXMgd2UnZCBuZWVkCglhIGJyYW5kIG5ldyBvcHRpb24gdGhhdCBtZWFudCAicmVhbGx5IGRlbGV0ZSB0aGlzIi4KCSogQVVUSE9SUywgZ2V0b3B0LmMsIGdldG9wdDEuYywgZ2V0b3B0LmgsIG1haW4uYyAocHJpbnRfdmVyc2lvbik6CglVcGRhdGVkIG1haWxpbmcgYWRkcmVzc2VzLgoKMTk5OC0wNi0wOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChtYWluKTogQW5kcmVhcyBMdWlrIDxsdWlrQGlzYS5kZT4gcG9pbnRzIG91dCB0aGF0IHRoZQoJY2hlY2sgZm9yIG1ha2VmaWxlIDo6IHJ1bGVzIHdpdGggY29tbWFuZHMgYnV0IG5vIGRlcGVuZGVuY2llcwoJY2F1c2luZyBhIGxvb3AgdGVybWluYXRlcyBpbmNvcnJlY3RseS4KCgkqIG1haW50TWFrZWZpbGU6IE1ha2UgYSB0ZW1wbGF0ZSBmb3IgUkVBRE1FLkRPUyB0byB1cGRhdGUgdmVyc2lvbgoJbnVtYmVycy4KCjE5OTgtMDUtMzAgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBEb24ndCBmcmVlIHRoZSBtZW1vcnkgZm9yIHRoZQoJZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgd2hlbiBkcm9wcGluZyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuCgoxOTk4LTA1LTMwICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogZGlyLmMgKGZpbGVfZXhpc3RzX3AsIGZpbGVfaW1wb3NzaWJsZV9wLCBmaWxlX2ltcG9zc2libGUpCglbX19NU0RPU19fLCBXSU5ET1dTMzJdOiBSZXRhaW4gdHJhaWxpbmcgc2xhc2ggaW4gImQ6LyIsIGFuZCBtYWtlCglkaXJuYW1lIG9mICJkOmZvbyIgYmUgImQ6Ii4KCjE5OTgtMDUtMjYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQXZvaWQgcnVubmluZyBwYXN0IEVPUyB3aGVuIHNjYW5uaW5nCglmaWxlIG5hbWUgYWZ0ZXIgYGluY2x1ZGUnLgoKMTk5OC0wNS0yNiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBtYWtlLnRleGluZm8gKEZsYXZvcnMpOiBDb3JyZWN0IGRlc2NyaXB0aW9uIG9mIGNvbmRpdGlvbmFsCglhc3NpZ25tZW50LCB3aGljaCBpcyBub3QgZXF1aXZhbGVudCB0byBpZm5kZWYuCgkoU2V0dGluZyk6IExpa2V3aXNlLgoKMTk5OC0wNS0yNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpOiBzdHJuY21wKCkgbWlnaHQgYmUgaW1wbGVtZW50ZWQgYXMgYQoJbWFjcm8sIHNvIGRvbid0IHB1dCBwcmVwcm9jZXNzb3IgY29uZGl0aW9ucyBpbnNpZGUgdGhlIGFyZ3VtZW50cwoJbGlzdC4KCjE5OTgtMDUtMjMgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpIFtfX01TRE9TX18sIFdJTkRPV1MzMl06IFNraXAgY29sb25zIGluCglkcml2ZSBzcGVjcyB3aGVuIHBhcnNpbmcgdGFyZ2V0cywgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlcyBhbmQKCXN0YXRpYyBwYXR0ZXJuIHJ1bGVzLiAgQSBjb2xvbiBjYW4gb25seSBiZSBwYXJ0IG9mIGRyaXZlIHNwZWMgaWYKCWl0IGlzIGFmdGVyIHRoZSBmaXJzdCBsZXR0ZXIgaW4gYSB0b2tlbi4KCjE5OTgtMDUtMjIgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiByZW1ha2UuYyAoZl9tdGltZSkgW19fTVNET1NfX106IEFsbG93IHVwIHRvIDMgc2VjIG9mIHNrZXcgYmVmb3JlCgl5ZWxsaW5nIGJsb29keSBtdXJkZXIuCgoJKiBkb3NidWlsZC5iYXQ6IFVzZSAtRElOQ0xVREVESVI9IGFuZCAtRExJQkRJUj0gd2hlcmUgYXBwcm9wcmlhdGUuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogQ29tYmluZSB0aGUgc3BlY2lhbCBmaWxlLWhhbmRsaW5nIGNvZGUKCWZvciBXSU5ET1dTMzIgYW5kIF9fTVNET1NfXyBpbnRvIGEgc2luZ2xlIHNuaXBwZXQuCgkoZ2V0X25leHRfbXdvcmQpIFtfX01TRE9TX18sIFdJTkRPV1MzMl06IEFsbG93IGEgd29yZCB0byBpbmNsdWRlIGEKCWNvbG9uIGFzIHBhcnQgb2YgYSBkcml2ZSBzcGVjLgoKCSogam9iLmMgKGJhdGNoX21vZGVfc2hlbGwpIFtfX01TRE9TX19dOiBEZWNsYXJlLgoKMTk5OC0wNS0yMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc2LjkwIHJlbGVhc2VkLgoKMTk5OC0wNS0xOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChNYWtlIEVycm9ycyk6IEFkZGVkIGEgbmV3IGFwcGVuZGl4IGRlc2NyaWJpbmcKCWNvbW1vbiBlcnJvcnMgbWFrZSBtaWdodCBnZW5lcmF0ZSBhbmQgaG93IHRvIHJlc29sdmUgdGhlbSAob3IgYXQKCWxlYXN0IG1vcmUgaW5mb3JtYXRpb24gb24gd2hhdCB0aGV5IG1lYW4pLgoKCSogbWFpbnRNYWtlZmlsZSAoTk1BS0VGSUxFUyk6IFVzZSB0aGUgbmV3IGF1dG9tYWtlIDEuMyBmZWF0dXJlCgl0byBjcmVhdGUgYSBkZXBlbmRlbmN5IGZpbGUgdG8gY29uc3RydWN0IE1ha2VmaWxlLkRPUywgU01ha2VmaWxlLAoJYW5kIE5NYWtlZmlsZS4KCSguZGVwX3NlZ21lbnQpOiBHZW5lcmF0ZSB0aGUgZGVwZW5kZW5jeSBmcmFnbWVudCBmaWxlLgoKMTk5OC0wNS0xNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS5tYW46IE1pbm9yIGNoYW5nZXMuCgoxOTk4LTA1LTEzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmdW5jdGlvbi5jIChwYXR0ZXJuX21hdGNoZXMsZXhwYW5kX2Z1bmN0aW9uKTogQ2hhbmdlIHZhcmlhYmxlcwoJYW5kIHR5cGVzIG5hbWVkICJ3b3JkIiB0byBzb21ldGhpbmcgZWxzZSwgdG8gYXZvaWQgY29tcGlsYXRpb24KCXByb2JsZW1zIG9uIENyYXkgQzkwIFVuaWNvcy4KCSogdmFyaWFibGUuaDogTW9kaWZ5IHRoZSBmdW5jdGlvbiBwcm90b3R5cGUuCgoxOTk4LTA1LTExICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtXSU5ET1dTMzJdOiBUdXJuIG9mZgoJZWNobyB3aGVuIHVzaW5nIGEgYmF0Y2ggZmlsZSwgYW5kIG1ha2Ugc3VyZSB0aGUgY29tbWFuZCBlbmRzIGluIGEKCW5ld2xpbmUuCgoxOTk4LTA1LTAzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW4gKG1ha2VfdHJ5X2N1c3RvbXMpOiBBZGQgc29tZSBjdXN0b21zIGZsYWdzIGlmIHRoZQoJdXNlciBjb25maWd1cmVzIGN1c3RvbSBzdXBwb3J0LgoKCSogam9iLmMsIHJlbW90ZS1jc3Rtcy5jOiBNZXJnZSBpbiBjaGFuZ2VzIGZvciBjdXN0b20gbGlicmFyeS4KCgkqIHJlbW90ZS1zdHViLmM6IEFkZCBvcHRpb24gdG8gc3R1YiBzdGFydF9yZW1vdGVfam9iX3AoKS4KCjE5OTgtMDUtMDEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogSW5zdGFsbCBWUEFUSCsgaGFuZGxpbmcgZm9yIGFyY2hpdmVzOyB1c2UKCXRoZSBobmFtZSBmaWVsZCBpbnN0ZWFkIG9mIHRoZSBuYW1lIGZpZWxkLCBhbmQgcmVoYXNoIHdoZW4KCWFwcHJvcHJpYXRlLgoKMTk5OC0wNC0zMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcnVsZS5jIChwcmludF9ydWxlX2RhdGFfYmFzZSk6IFByaW50IG91dCBhbnkgcGF0dGVybi1zcGVjaWZpYwoJdmFyaWFibGUgdmFsdWVzIGludG8gdGhlIHJ1bGVzIGRhdGFiYXNlLgoKCSogdmFyaWFibGUuYyAocHJpbnRfdmFyaWFibGVfc2V0KTogTWFrZSB0aGlzIHZhcmlhYmxlIGV4dGVybiwgdG8KCWJlIGNhbGxlZCBieSBwcmludF9ydWxlX2RhdGFfYmFzZSgpIGZvciBwYXR0ZXJuLXNwZWNpZmljIHZhcmlhYmxlcy4KCgkqIG1ha2UudGV4aW5mbyAoUGF0dGVybi1zcGVjaWZpYyk6IERvY3VtZW50IHBhdHRlcm4tc3BlY2lmaWMKCXZhcmlhYmxlcy4KCjE5OTgtMDQtMjkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9leHBhbmRfZm9yX2ZpbGUpOiBNYWtlIHN0YXRpYzsgaXRzIG9ubHkKCWNhbGxlZCBpbnRlcm5hbGx5LiAgTG9vayB1cCB0aGlzIHRhcmdldCBpbiB0aGUgbGlzdCBvZgoJcGF0dGVybi1zcGVjaWZpYyB2YXJpYWJsZXMgYW5kIGluc2VydCB0aGUgdmFyaWFibGUgc2V0IGludG8gdGhlCglxdWV1ZSB0byBiZSBzZWFyY2hlZC4KCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBBZGQgYSBuZXcgZmllbGQgdG8gaG9sZCB0aGUKCXByZXZpb3VzbHktZm91bmQgcGF0dGVybi1zcGVjaWZpYyB2YXJpYWJsZSByZWZlcmVuY2UuICBBZGQgYSBuZXcKCWZsYWcgdG8gcmVtZW1iZXIgd2hldGhlciB3ZSBhbHJlYWR5IHNlYXJjaGVkIGZvciB0aGlzIGZpbGUuCgoJKiBydWxlLmggKHN0cnVjdCBwYXR0ZXJuX3Zhcik6IE5ldyBzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcKCXBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGUgdmFsdWVzLiAgRGVmaW5lIG5ldyBmdW5jdGlvbiBwcm90b3R5cGVzLgoKCSogcnVsZS5jOiBOZXcgdmFyaWFibGVzIHBhdHRlcm5fdmFycyBhbmQgbGFzdF9wYXR0ZXJuX3ZhciBmb3IKCXN0b3JhZ2UgYW5kIGhhbmRsaW5nIG9mIHBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGUgdmFsdWVzLgoJKGNyZWF0ZV9wYXR0ZXJuX3Zhcik6IENyZWF0ZSBhIG5ldyBwYXR0ZXJuLXNwZWNpZmljIHZhcmlhYmxlIHZhbHVlCglzdHJ1Y3R1cmUuCgkobG9va3VwX3BhdHRlcm5fdmFyKTogVHJ5IHRvIG1hdGNoIGEgdGFyZ2V0IHRvIG9uZSBvZiB0aGUKCXBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGUgdmFsdWVzLgoKMTk5OC0wNC0yMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChUYXJnZXQtc3BlY2lmaWMpOiBEb2N1bWVudCB0YXJnZXQtc3BlY2lmaWMKCXZhcmlhYmxlcy4KCjE5OTgtMDQtMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV92YXJpYWJsZV9pbl9zZXQpOiBNYWRlIGdsb2JhbGx5IHZpc2libGUuCgkobG9va3VwX3ZhcmlhYmxlX2luX3NldCk6IE5ldyBmdW5jdGlvbjogbGlrZSBsb29rdXBfdmFyaWFibGUgYnV0Cglsb29rIG9ubHkgaW4gYSBzcGVjaWZpYyB2YXJpYWJsZSBzZXQuCgkodGFyZ2V0X2Vudmlyb25tZW50KTogVXNlIGxvb2t1cF92YXJpYWJsZV9pbl9zZXQoKSB0byBnZXQgdGhlCgljb3JyZWN0IGV4cG9ydCBydWxlcyBmb3IgYSB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUuCgkoY3JlYXRlX25ld192YXJpYWJsZV9zZXQpOiBDcmVhdGUgYSBuZXcgdmFyaWFibGUgc2V0LCBhbmQganVzdAoJcmV0dXJuIGl0IHdpdGhvdXQgaW5zdGFsbGluZyBpdCBhbnl3aGVyZS4KCShwdXNoX25ld192YXJpYWJsZV9zY29wZSk6IFJlaW1wbGVtZW50IGluIHRlcm1zIG9mCgljcmVhdGVfbmV3X3ZhcmlhYmxlX3NldC4KCgkqIHJlYWQuYyAocmVjb3JkX3RhcmdldF92YXIpOiBMaWtlIHJlY29yZF9maWxlcywgYnV0IGluc3RlYWQgb2YKCWZpbGVzIGNyZWF0ZSBhIHRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUKCWxpc3RlZCB0YXJnZXRzLiAgSW52b2tlZCBmcm9tIHJlYWRfbWFrZWZpbGUoKSB3aGVuIHRoZSB0YXJnZXQgbGluZQoJdHVybnMgb3V0IHRvIGJlIGEgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlIGFzc2lnbm1lbnQuCgoxOTk4LTA0LTE5ICBQYXVsIEQuIFNtaXRoIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJld3JpdGUgdGhlIGVudGlyZSB0YXJnZXQgcGFyc2luZwoJc2VjdGlvbiB0byBpbXBsZW1lbnQgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlcy4gIEluIHBhcnRpY3VsYXIsIHdlCgljYW5ub3QgZXhwYW5kIHRoZSBlbnRpcmUgbGluZSBhcyBzb29uIGFzIGl0J3MgcmVhZCBpbiwgc2luY2Ugd2UKCW1heSB3YW50IHRvIGV2YWx1YXRlIHBhcnRzIG9mIGl0IHdpdGggZGlmZmVyZW50IHZhcmlhYmxlIGNvbnRleHRzCglhY3RpdmUuICBJbnN0ZWFkLCBzdGFydCBleHBhbmRpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIHVudGlsIHdlIGZpbmQKCXRoZSBgOicgKG9yIGA6OicpLCB0aGVuIGRldGVybWluZSB3aGF0IGtpbmQgb2YgbGluZSB0aGlzIGlzIGFuZAoJY29udGludWUgYXBwcm9wcmlhdGVseS4KCgkqIHJlYWQuYyAoZ2V0X25leHRfbXdvcmQpOiBOZXcgZnVuY3Rpb24gdG8gcGFyc2UgYSBtYWtlZmlsZSBsaW5lCglieSAid29yZHMiLCBjb25zaWRlcmluZyBhbiBlbnRpcmUgdmFyaWFibGUgb3IgZnVuY3Rpb24gYXMgb25lCgl3b3JkLiAgUmV0dXJuIHRoZSB0eXBlIHJlYWQgaW4sIGFsb25nIHdpdGggaXRzIHN0YXJ0aW5nIHBvc2l0aW9uCglhbmQgbGVuZ3RoLgoJKGVudW0gbWFrZV93b3JkX3R5cGUpOiBUaGUgdHlwZXMgb2Ygd29yZHMgdGhhdCBhcmUgcmVjb2duaXplZCBieQoJZ2V0X25leHRfbXdvcmQoKS4KCgkqIHZhcmlhYmxlLmggKHN0cnVjdCB2YXJpYWJsZSk6IEFkZCBhIGZsYWcgdG8gc3BlY2lmeSBhIHBlci10YXJnZXQKCXZhcmlhYmxlLgoKCSogZXhwYW5kLmM6IE1ha2UgdmFyaWFibGVfYnVmZmVyIGdsb2JhbC4gIFdlIG5lZWQgdGhpcyBkdXJpbmcgdGhlCgluZXcgcGFyc2luZyBvZiB0aGUgbWFrZWZpbGUuCgkodmFyaWFibGVfZXhwYW5kX3N0cmluZyk6IE5ldyBmdW5jdGlvbi4gIExpa2UgdmFyaWFibGVfZXhwYW5kKCksCglidXQgc3RhcnQgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgYnVmZmVyLCBub3QgdGhlIGJlZ2lubmluZy4KCSh2YXJpYWJsZV9leHBhbmQpOiBSZXdyaXRlIHRvIHNpbXBseSBjYWxsIHZhcmlhYmxlX2V4cGFuZF9zdHJpbmcoKS4KCjE5OTgtMDQtMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IEFsbG93IHRoZSByZWJ1aWxkaW5nIG1ha2VmaWxlcwoJc3RlcCB0byB1c2UgcGFyYWxsZWwgam9icy4gIE5vdCBzdXJlIHdoeSB0aGlzIHdhcyBkaXNhYmxlZDoKCWhvcGVmdWxseSB3ZSB3b24ndCBmaW5kIG91dCA6LS8uCgoxOTk4LTA0LTExICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKG1haW4pOiBTZXQgdGhlIENVUkRJUiBtYWtlZmlsZSB2YXJpYWJsZS4KCSogbWFrZS50ZXhpbmZvIChSZWN1cnNpb24pOiBEb2N1bWVudCBpdC4KCjE5OTgtMDMtMTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1pc2MuYyAobWFrZWZpbGVfZmF0YWwpOiBJZiBGSUxFIGlzIG5pbCwgaW52b2tlIHBsYWluIGZhdGFsKCkuCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogVXNlIG5ldyBmZWF0dXJlLgoKMTk5OC0wMy0xMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChtYWluKTogRG9uJ3QgcGFzcyBpbmNsdWRlZCwgcmVidWlsdCBtYWtlZmlsZXMgdG8KCXJlLWV4ZWMnZCBtYWtlcyB3aXRoIC1vLiAgUmVvcGVucyBhIHBvc3NpYmxlIGxvb3AsIGJ1dCBpdCBjYXVzZWQKCXRvbyBtYW55IHByb2JsZW1zLgoKMTk5OC0wMy0wMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBJbXBsZW1lbnQgPz0uCgkqIG1ha2UudGV4aW5mbyAoU2V0dGluZyk6IERvY3VtZW50IGl0LgoKMTk5OC0wMi0yOCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFJlc2V0IGV4ZWN1dGVfYnlfc2hlbGwgYWZ0ZXIgYW4gZW1wdHkKICAgICAgICBjb21tYW5kLCBsaWtlICI6IiwgaGFzIGJlZW4gc2Vlbi4KClR1ZSBPY3QgMDcgMTU6MDA6MDAgMTk5NyAgUGhpbCBCcm9va3MgPHBoaWxsaXBfYnJvb2tzQGhwLmNvbT4KCgkqIG1ha2UuaCBbV0lORE9XUzMyXTogbWFrZSBjYXNlIHNlbnNpdGl2aXR5IGNvbmZpZ3VyYWJsZQoJKiBkaXIuYyBbV0lORE9XUzMyXTogbWFrZSBjYXNlIHNlbnNpdGl2aXR5IGNvbmZpZ3VyYWJsZQoJKiBSRUFETUUuVzMyOiBEb2N1bWVudCBjYXNlIHNlbnNpdGl2aXR5CgkqIGNvbmZpZy5hbWk6IFNoYXJlIGNhc2Ugd2FycGluZyBjb2RlIHdpdGggV2luZG93cwoKTW9uIE9jdCAgNiAxODo0ODo0NSBDRFQgMTk5NyBSb2IgVHVsbG9oIDxyb2JfdHVsbG9oQGRldi50aXZvbGkuY29tPgoKCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYzogQWRkZWQgc3VwcG9ydCBmb3IgTUtTIHRvb2xraXQgc2hlbGwKCSh0dXJuIG9uIEhBVkVfTUtTX1NIRUxMKS4KCSogcmVhZC5jIFtXSU5ET1dTMzJdOiBGaXhlZCBhIHByb2JsZW0gd2l0aCBtdWx0aXBsZSB0YXJnZXQgcnVsZXMKIAlyZXBvcnRlZCBieSBHaWxiZXJ0IENhdGlwb24gKGdjYXRpcG9uQHRpYmNvLmNvbSkuICBJZiBtdWx0aXBsZQogCXBhdGggdG9rZW5zIGluIGEgcnVsZSBkaWQgbm90IGhhdmUgZHJpdmUgbGV0dGVycywgbWFrZSB3b3VsZAogCWluY29ycmVjdGx5IGNvbmNhdGVuYXRlIHRoZSAyIHRva2VucyB0b2dldGhlci4KCSogbWFpbi5jL3ZhcmlhYmxlLmMgW1dJTkRPV1MzMl06IGNoYW5nZWQgU0hFTEwgZGV0ZWN0aW9uIGNvZGUgdG8KIAlmb2xsb3cgd2hhdCBNU0RPUyBkaWQuIEluIGFkZGl0aW9uIHRvIHdhdGNoaW5nIGZvciBTSEVMTCB2YXJpYWJsZQogCXVwZGF0ZXMsIG1ha2UncyBtYWluIHdpbGwgYXR0ZW1wdCB0byBkZWZhdWx0IHRoZSB2YWx1ZSBvZiBTSEVMTAogCWJlZm9yZSBhbmQgYWZ0ZXIgbWFrZWZpbGVzIGFyZSBwYXJzZWQuCgkqIGpvYi5jL2pvYi5oIFtXSU5ET1dTMzJdOiBUaGUgbGF0ZXN0IGNoYW5nZXMgbWFkZSB0byBlbmFibGUgdXNlCiAJb2YgdGhlIEdOVVdJTjMyIHNoZWxsIGZyb20gbWFrZSBjb3VsZCBjYXVzZSBtYWtlIHRvIGZhaWwgZHVlIHRvIGEKIAljb25jdXJyZW5jeSBjb25kaXRpb24gYmV0d2VlbiBwYXJlbnQgYW5kIGNoaWxkIHByb2Nlc3Nlcy4gIE1ha2UKIAlub3cgY3JlYXRlcyBhIGJhdGNoIGZpbGUgcGVyIGpvYiBpbnN0ZWFkIG9mIHRyeWluZyB0byByZXVzZSB0aGUKIAlzYW1lIHNpbmdsZXRvbiBiYXRjaCBmaWxlLgoJKiBqb2IuYy9qb2IuaC9mdW5jdGlvbi5jL2NvbmZpZy5oLlczMiBbV0lORE9XUzMyXTogUmVuYW1lZCBtYWNybwogCWZyb20gSEFWRV9DWUdOVVNfR05VV0lOMzJfVE9PTFMgdG8gQkFUQ0hfTU9ERV9PTkxZX1NIRUxMLiBSZXdvcmtlZAogCWxvZ2ljIHRvIHJlZHVjZSBjb21wbGV4aXR5LiBXSU5ET1dTMzIgbm93IHVzZXMgdGhlIHVuaXh5X3NoZWxsCiAJdmFyaWFibGUgdG8gZGV0ZWN0IEJvdXJuZS1zaGVsbCBjb21wYXRpYmxlIGVudmlyb25tZW50cy4gVGhlcmUgaXMKIAlhbHNvIGEgYmF0Y2hfbW9kZV9zaGVsbCB2YXJpYWJsZSB0aGF0IGRldGVybWluZXMgd2hldGhlciBub3QKIAljb21tYW5kIGxpbmVzIHNob3VsZCBiZSBleGVjdXRlZCB2aWEgc2NyaXB0IGZpbGVzLiBBIFdJTkRPV1MzMgogCXN5c3RlbSB3aXRoIG5vIHNoLmV4ZSBpbnN0YWxsZWQgd291bGQgaGF2ZSB1bml4eV9zaGVsbCBzZXQgdG8KIAlGQUxTRSBhbmQgYmF0Y2hfbW9kZV9zaGVsbCBzZXQgdG8gVFJVRS4gSWYgeW91IGhhdmUgYSB1bml4eSBzaGVsbAogCXRoYXQgZG9lcyBub3QgYmVoYXZlIHdlbGwgd2hlbiBpbnZva2luZyB0aGluZ3MgdmlhICdzaCAtYyB4eHgnLAogCXlvdSBtYXkgd2FudCB0byB0dXJuIG9uIEJBVENIX01PREVfT05MWV9TSEVMTCBhbmQgc2VlIGlmIHRoaW5ncwogCWltcHJvdmUuCgkqIE5NYWtlZmlsZTogQWRkZWQgL0QgREVCVUcgdG8gZGVidWcgYnVpbGQgZmxhZ3Mgc28gdGhhdCB1bmhhbmRsZWQKIAlleGNlcHRpb25zIGNvdWxkIGJlIGRlYnVnZ2VkLgoKTW9uIE9jdCAgNiAwMDowNDoyNSAxOTk3ICBSb2IgVHVsbG9oIDxyb2JfdHVsbG9oQGRldi50aXZvbGkuY29tPgoKCSogbWFpbi5jIFtXSU5ET1dTMzJdOiBUaGUgZnVuY3Rpb24gZGVmaW5lX3ZhcmlhYmxlKCkgZG9lcyBub3QKIAloYW5kbGUgTlVMTC4gVGVzdCBiZWZvcmUgY2FsbGluZyBpdCB0byBzZXQgUGF0aC4KCSogbWFpbi5jIFtXSU5ET1dTMzJdOiBTZWFyY2ggUGF0aCBhZ2FpbiBhZnRlciBtYWtlZmlsZXMgaGF2ZSBiZWVuCglwYXJzZWQgdG8gZGV0ZWN0IHNoLmV4ZS4KCSogam9iLmMgW1dJTkRPV1MzMl06IEFkZGVkIHN1cHBvcnQgZm9yIEN5Z251cyBHTlUgV0lOMzIgdG9vbHMuCglUbyB1c2UsIHR1cm4gb24gSEFWRV9DWUdOVVNfR05VV0lOMzJfVE9PTFMgaW4gY29uZmlnLmguVzMyLgoJKiBjb25maWcuaC5XMzI6IEFkZGVkIEhBVkVfQ1lHTlVTX0dOVVdJTjMyX1RPT0xTIG1hY3JvLgoKU3VuIE9jdCAgNSAyMjo0Mzo1OSAxOTk3ICBKb2huIFcuIEVhdG9uIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiBnbG9iL2dsb2IuYyAoZ2xvYl9pbl9kaXIpIFtWTVNdOiBHbG9iYmluZyBzaG91bGRuJ3QgYmUKCWNhc2Utc2Vuc2l0aXZlLgoJKiBqb2IuYyAoY2hpbGRfZXhlY3V0ZV9qb2IpIFtWTVNdOiBVc2UgYSBWTVMgLmNvbSBmaWxlIGlmIHRoZQoJY29tbWFuZCBjb250YWlucyBhIG5ld2xpbmUgKGUuZy4gZnJvbSBhIGRlZmluZS9lbmRkZWYgYmxvY2spLgoJKiB2bXNpZnkuYyAodm1zaWZ5KTogUmV0dXJuIHJlbGF0aXZlIHBhdGhuYW1lcyB3aGVyZXZlciBwb3NzaWJsZS4KCSogdm1zaWZ5LmMgKHZtc2lmeSk6IEFuIGlucHV0IHN0cmluZyBsaWtlICIuLi8uLiIgcmV0dXJucyAiWy0tXSIuCgpXZWQgT2N0ICAxIDE1OjQ1OjA5IDE5OTcgIFJvYiBUdWxsb2ggPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIE5NYWtlZmlsZTogQ2hhbmdlZCBubWFrZSB0byAkKE1BS0UpLgoJKiBzdWJwcm9jLmJhdDogVGFrZSB0aGUgbWFrZSBjb21tYW5kIG5hbWUgZnJvbSB0aGUgY29tbWFuZAoJbGluZS4gSWYgbm8gY29tbWFuZCBuYW1lIHdhcyBnaXZlbiwgZGVmYXVsdCB0byBubWFrZS4KCSogam9iLmMgW01TRE9TLCBXSU5ET1dTMzJdOiBGaXggbWVtb3J5IHN0b21wOiB0ZW1wb3JhcnkgZmlsZSBuYW1lcwoJYXJlIG5vdyBhbHdheXMgY3JlYXRlZCBpbiBoZWFwIG1lbW9yeS4KCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYzogTmV3IGltcGxlbWVudGF0aW9uIG9mIG1ha2VfY29tbWFuZF9saW5lKCkKCXdoaWNoIGlzIG1vcmUgY29tcGF0aWJsZSB3aXRoIGRpZmZlcmVudCBCb3VybmUgc2hlbGwgaW1wbGVtZW50YXRpb25zLgoJRGVsZXRlZCB0aGUgbm93IG9ic29sZXRlIGZpeF9jb21tYW5kX2xpbmUoKSBmdW5jdGlvbi4KCSogbWFpbi5jIFtXSU5ET1dTMzJdOiBBbnkgYXJiaXRyYXJ5IHNwZWxsaW5nIG9mIFBhdGggY2FuIGJlCglkZXRlY3RlZC4gTWFrZSB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzcGVjaWFsIHNwZWxsaW5nIGBQYXRoJyBpcwoJaW5zZXJ0ZWQgaW50byB0aGUgZW52aXJvbm1lbnQgd2hlbiB0aGUgcGF0aCB2YXJpYWJsZSBpcyBwcm9wYWdhdGVkCgl3aXRoaW4gaXRzZWxmIGFuZCB0byBtYWtlJ3MgY2hpbGRyZW4uCgkqIG1haW4uYyBbV0lORE9XUzMyXTogRGV0ZWN0aW9uIG9mIHNoLmV4ZSB3YXMgb2NjdXJyaW5nIHRvbwoJc29vbi4gVGhlIDJuZCBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBzaC5leGUgbXVzdCBjb21lIGFmdGVyCgl0aGUgY2FsbCB0byByZWFkX2FsbF9tYWtlZmlsZXMoKS4KCkZyaSBTZXAgMjYgMDE6MTQ6MTggMTk5NyAgPHppbnNlckBheHA2MDIuZ3NpLmRlPgoKCSogbWFrZWZpbGUuY29tIFtWTVNdOiBGaXhlZCBkZWZpbml0aW9uIG9mIHN5cy4KCSogcmVhZG1lLnZtczogQ29tbWVudHMgb24gd2hhdCdzIGNoYW5nZWQgbGF0ZWx5LgoKRnJpIFNlcCAyNiAwMToxNDoxOCAxOTk3ICBKb2huIFcuIEVhdG9uIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiByZWFkLmMgKHJlYWRfYWxsX21ha2VmaWxlcyk6IEFsbG93IG1ha2UgdG8gZmluZCBmaWxlcyBuYW1lZAoJIk1BS0VGSUxFIiB3aXRoIG5vIGV4dGVuc2lvbiBvbiBWTVMuCgkqIGZpbGUuYyAobG9va3VwX2ZpbGUpOiBMb3dlcmNhc2UgZmlsZW5hbWVzIG9uIFZNUy4KCjE5OTctMDktMjkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmV3b3JrZWQgdGFyZ2V0IGRldGVjdGlvbiBhZ2FpbjsgdGhlIG9sZAoJdmVyc2lvbiBoYWQgYW4gb2JzY3VyZSBxdWlyay4KCkZyaSBTZXAgMTkgMDk6MjA6NDkgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBWZXJzaW9uIDMuNzYuMSByZWxlYXNlZC4KCgkqIE1ha2VmaWxlLmFtOiBBZGQgbG9hZGF2ZyBmaWxlcyB0byBjbGVhbiBydWxlcy4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogUmVtb3ZlIHN0YW1wLWNvbmZpZzsgbm8gbG9uZ2VyIG5lZWRlZC4KCSogTWFrZWZpbGUuYW1pIChkaXN0Y2xlYW4pOiBEaXR0by4KCSogU01ha2VmaWxlIChkaXN0Y2xlYW4pOiBEaXR0by4KCgkqIG1haW4uYyAobWFpbik6IEFyZyBjb3VudCBzaG91bGQgYmUgaW50LCBub3QgY2hhciEgIE1ham9yIGJyYWluby4KClR1ZSBTZXAgMTYgMTA6MTg6MjIgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBWZXJzaW9uIDMuNzYgcmVsZWFzZWQuCgpUdWUgU2VwICAyIDEwOjA3OjM5IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKTogV2hlbiBwcm9jZXNzaW5nICQoc2hlbGwuLi4pCiAgCXRyYW5zbGF0ZSBhIENSTEYgKFxyXG4pIHNlcXVlbmNlIGFzIHdlbGwgYXMgYSBuZXdsaW5lIChcbikgdG8gYQogCXNwYWNlLiAgQWxzbyByZW1vdmUgYW4gZW5kaW5nIFxyXG4gc2VxdWVuY2UuCgkqIG1ha2UudGV4aW5mbyAoU2hlbGwgRnVuY3Rpb24pOiBEb2N1bWVudCBpdC4KCkZyaSBBdWcgMjkgMTI6NTk6MDYgMTk5NyAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIHczMi9wYXRoc3R1ZmYuYyAoY29udmVydF9QYXRoX3RvX3dpbmRvd3MzMik6IEZpeCBwcm9ibGVtIHdoZXJlCiAJcGF0aHMgd2hpY2ggY29udGFpbiBzaW5nbGUgY2hhcmFjdGVyIGVudHJpZXMgbGlrZSBgLicgYXJlIG5vdAogCWhhbmRsZWQgY29ycmVjdGx5LgoKCSogUkVBRE1FLlczMjogRG9jdW1lbnQgcGF0aCBoYW5kbGluZyBpc3N1ZXMgb24gV2luZG93cyBzeXN0ZW1zLgoKRnJpIEF1ZyAyOSAwMjowMToyNyAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NS45My4KClRodSBBdWcgMjggMTk6Mzk6MDYgMTk5NyAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIGpvYi5jIChleGVjX2NvbW1hbmQpIFtXSU5ET1dTMzJdOiBJZiBleGVjX2NvbW1hbmQoKSBpcyBpbnZva2VkCiAJZnJvbSBtYWluKCkgdG8gcmUtZXhlYyBtYWtlLCB0aGUgY2FsbCB0byBleGVjdnAoKSB3b3VsZAogCWluY29ycmVjdGx5IHJldHVybiBjb250cm9sIHRvIHBhcmVudCBzaGVsbCBiZWZvcmUgdGhlIGV4ZWMnZWQKIAljb21tYW5kIGNvdWxkIHJ1biB0byBjb21wbGV0aW9uLiBJIGJlbGlldmUgdGhpcyBpcyBhIGZlYXR1cmUgb2YKIAl0aGUgd2F5IHRoYXQgZXhlY3ZwKCkgaXMgaW1wbGVtZW50ZWQgb24gdG9wIG9mIFdJTkRPV1MzMiBBUElzLiBUbwogCWFsbGV2aWF0ZSB0aGUgcHJvYmxlbSwgdXNlIHRoZSBzdXBwbGllZCBwcm9jZXNzIGxhdW5jaCBmdW5jdGlvbiBpbgogCXRoZSBzdWJfcHJvYyBsaWJyYXJ5IGFuZCBzdXNwZW5kIHRoZSBwYXJlbnQgcHJvY2VzcyB1bnRpbCB0aGUKIAljaGlsZCBwcm9jZXNzIGhhcyBydW4uICBXaGVuIHRoZSBjaGlsZCBleGl0cywgZXhpdCB0aGUgcGFyZW50IG1ha2UKIAl3aXRoIHRoZSBleGl0IGNvZGUgb2YgdGhlIGNoaWxkIG1ha2UuCgpUaHUgQXVnIDI4IDE3OjA0OjQ3IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogTWFrZWZpbGUuRE9TLnRlbXBsYXRlIChkaXN0ZGlyKTogRml4IGEgbGluZSB0aGF0IGdvdCB3cmFwcGVkIGluCgllbWFpbC4KCgkqIE1ha2VmaWxlLmFtIChsb2FkYXZnKTogR2l2ZSB0aGUgbmVjZXNzYXJ5IGNtZGxpbmUgb3B0aW9ucyB3aGVuCglsaW5raW5nIGxvYWRhdmcuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBwc3RhdF9nZXRkeW5hbWljIGZvciBnZXRsb2Fkdmcgb24gSFAuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpIFtWTVMsIF9BTUlHQV06IERvbid0IHBlcmZvcm0gZW1wdHkKCWNvbW1hbmQgb3B0aW1pemF0aW9uIG9uIHRoZXNlIHN5c3RlbXM7IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZS4KCldlZCBBdWcgMjcgMTc6MDk6MzIgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBWZXJzaW9uIDMuNzUuOTIKClR1ZSBBdWcgMjYgMTE6NTk6MTUgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBBZGQgJzk3IHRvIGNvcHlyaWdodCB5ZWFycy4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogQ2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgYmVmb3JlIGxvb2tpbmcKCWF0IGEgcGFydGljdWxhciBvZmZzZXQuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEV4YW1pbmUgdGhlIGxhc3QgYnl0ZQoJb2YgdGhlIHByZXZpb3VzIGFyZywgbm90IHRoZSBieXRlIGFmdGVyIHRoYXQuCgpTYXQgQXVnIDIzIDE5OTcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBNYWtlZmlsZS5ET1MudGVtcGxhdGU6IE5ldyBmaWxlIChjb252ZXJ0ZWQgdG8gTWFrZWZpbGUuRE9TIGluCgl0aGUgZGlzdHJpYnV0aW9uKS4KCgkqIGNvbmZpZ3VyZS5iYXQ6IFJld3JpdGUgdG8gdXNlIE1ha2VmaWxlLkRPUyBpbnN0ZWFkIG9mIGVkaXRpbmcKICAgICAgICBNYWtlZmlsZS5pbi4gIEFkZCBzdXBwb3J0IGZvciBidWlsZGluZyBmcm9tIG91dHNpZGUgb2YgdGhlIHNvdXJjZQogICAgICAgIGRpcmVjdG9yeS4gIEZhaWwgaWYgdGhlIGVudmlyb25tZW50IGJsb2NrIGlzIHRvbyBzbWFsbC4KCgkqIGNvbmZpZ2guZG9zOiBVc2UgPHN5cy9jb25maWcuaD4uCgoJKiBSRUFETUUuRE9TOiBVcGRhdGUgaW5zdHJ1Y3Rpb25zLgoKRnJpIEF1ZyAyMiAxOTk3ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKSBbX19NU0RPU19fXTogRG9uJ3QgdGVzdCBmb3IgIi9iaW4vc2giCiAgICAgICAgbGl0ZXJhbGx5LCB1c2UgdmFsdWUgb2YgdW5peHlfc2hlbGwgaW5zdGVhZC4KCgkqIGZpbGVkZWYuaCAoTkVXX01USU1FKTogVXNlIDEgbGVzcyB0aGFuIG1heGltdW0gcG9zc2libGUgdmFsdWUgaWYKICAgICAgICB0aW1lX3QgaXMgdW5zaWduZWQuCgpTYXQgQXVnIDE2IDAwOjU2OjE1IDE5OTcgIEpvaG4gVy4gRWF0b24gIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiB2bXNpZnkuYyAodm1zaWZ5LCBjYXNlIDExKTogQWZ0ZXIgdHJhbnNsYXRpbmcgYC4uJyBlbGVtZW50cywgc2V0CiAgICAgICAgbnN0YXRlIHRvIE5fT1BFTiBpZiB0aGVyZSBhcmUgc3RpbGwgbW9yZSBlbGVtZW50cyB0byBwcm9jZXNzLgogICAgICAgICh2bXNpZnksIGNhc2UgMik6IEFmdGVyIHRyYW5zbGF0aW5nIGBmb28vYmFyJyB1cCB0byB0aGUgc2xhc2gsCiAgICAgICAgc2V0IG5zdGF0ZSB0byBOX09QRU4sIG5vdCBOX0RPVC4KCkZyaSBBdWcgIDggMTU6MTg6MDkgMTk5NyAgSm9obiBXLiBFYXRvbiAgPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCgkqIGRpci5jICh2bXNzdGF0X2Rpcik6IExlYXZlIG5hbWUgdW5tb2RpZmllZCBvbiBleGl0LgoJKiBtYWtlLmggKFBBVEhfU0VQQVJBVE9SX0NIQVIpOiBTZXQgdG8gY29tbWEgZm9yIFZNUy4KCSogdnBhdGguYzogRml4IGNvbW1lbnRzIHRvIHJlZmVyIHRvIHBhdGggc2VwYXJhdG9yLCBub3QgY29sb24uCiAgICAgICAgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBBdm9pZCBVbml4eSBzbGFzaCBoYW5kbGluZyBmb3IgVk1TLgoKVGh1IEF1ZyAgNyAyMjoyNDowMyAxOTk3ICBKb2huIFcuIEVhdG9uICA8andlQGJldm8uY2hlLndpc2MuZWR1PgoKCSogYXIuYyBbVk1TXTogRG9uJ3QgZGVjbGFyZSBhcl9tZW1iZXJfdG91Y2guCglEZWxldGUgVk1TIHZlcnNpb24gb2YgYXJfbWVtYmVyX2RhdGUuCglFbmFibGUgbm9uLVZNUyB2ZXJzaW9ucyBvZiBhcl9tZW1iZXJfZGF0ZSBhbmQgYXJfbWVtYmVyX2RhdGVfMSBmb3IKCVZNUyB0b28uCgkqIGFyc2Nhbi5jIChWTVNfZ2V0X21lbWJlcl9pbmZvKTogTmV3IGZ1bmN0aW9uLgoJKGFyX3NjYW4pOiBQcm92aWRlIHZlcnNpb24gZm9yIFZNUyBzeXN0ZW1zLgoJKGFyX25hbWVfZXF1YWwpOiBTaW1wbHkgY29tcGFyZSBuYW1lIGFuZCBtZW0gb24gVk1TIHN5c3RlbXMuCglEb24ndCBkZWZpbmUgYXJfbWVtYmVyX3BvcyBvciBhcl9tZW1iZXJfdG91Y2ggb24gVk1TIHN5c3RlbXMuCgoJKiBjb25maWcuaC12bXMgKHBpZF90LCB1aWRfdCk6IERvbid0IGRlZmluZS4KCgkqIHJlbWFrZS5jOiBEZWxldGUgZGVjbGFyYXRpb24gb2Ygdm1zX3N0YXQuCgkobmFtZV9tdGltZSk6IERvbid0IGNhbGwgdm1zX3N0YXQuCgkoZl9tdGltZSkgW1ZNU106IEZ1bmt5IHRpbWUgdmFsdWUgbWFuaXB1bGF0aW9uIG5vIGxvbmdlciBuZWNlc3NhcnkuCgoJKiBmaWxlLmMgKHByaW50X2ZpbGUpOiBbVk1TXSBVc2UgY3RpbWUsIG5vdCBjdnRfdGltZS4KCgkqIG1ha2UuaCBbVk1TXTogRG9uJ3QgZGVmaW5lIFBPU0lYLgoKCSogbWFrZWZpbGUuY29tIChmaWxlbGlzdCk6IEluY2x1ZGUgYXIgYW5kIGFyc2Nhbi4KCUFsc28gaW5jbHVkZSB0aGVtIGluIHRoZSBsaW5rIGNvbW1hbmRzLgoJRG9uJ3QgZGVmaW5lIE5PX0FSQ0hJVkVTIGluIGNjIGNvbW1hbmQuCgoJKiBtYWtlZmlsZS52bXMgKEFSQ0hJVkVTLCBBUkNISVZFU19TUkMpOiBVbmNvbW1lbnQuCgkoZGVmaW5lcyk6IERlbGV0ZSBOT19BUkNISVZFUyBmcm9tIGxpc3QuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IE9ubHkgY2hlY2sgdG8gc2VlIGlmIGludGVybWVkaWF0ZSBmaWxlIGlzCglvdXQgb2YgZGF0ZSBpZiBpdCBhbHNvIGV4aXN0cyAoaS5lLiwgbXRpbWUgIT0gKHRpbWVfdCkgLTEpLgoKCSogdm1zZGlyLmggKHVfbG9uZywgdV9zaG9ydCk6IFNraXAgdHlwZWRlZnMgaWYgdXNpbmcgREVDIEMuCgpGcmkgSnVuIDIwIDIzOjAyOjA3IDE5OTcgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiB3MzIvc3VicHJvYy9zdWJfcHJvYy5jOiBHZXQgVzMyIHN1Yl9wcm9jIHRvIGhhbmRsZSBzaGViYW5nCgkoIyEvYmluL3NoKSBpbiBzY3JpcHQgZmlsZXMgY29ycmVjdGx5LgoJRml4ZWQgYSBjb3VwbGUgb2YgbWVtb3J5IGxlYWtzLgoJRml4ZWQgc2VhcmNoIG9yZGVyIGluIGZpbmRfZmlsZSgpICh3MzIvc3VicHJvYy9zdWJfcHJvYy5jKSBzbyB0aGF0CglmaWxlcyB3aXRoIGV4dGVuc2lvbnMgYXJlIHByZWZlcnJlZCBvdmVyIGZpbGVzIHdpdGhvdXQgZXh0ZW5zaW9ucy4KCUFkZGVkIHNlYXJjaCBmb3IgZmlsZXMgd2l0aCAuY21kIGV4dGVuc2lvbiB0b28uCgkqIHczMi9zdWJwcm9jL21pc2MuYyAoYXJyMmVudmJsayk6IEZpeGVkIG1lbW9yeSBsZWFrLgoKTW9uIEF1ZyAxOCAwOTo0MTowOCAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NS45MQoKRnJpIEF1ZyAxNSAxMzo1MDo1NCAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogUmVtZW1iZXIgdG8gY291bnQgdGhlIG5ld2xpbmUgYWZ0ZXIgdGhlIGVuZGVmLgoKVGh1IEF1ZyAxNCAyMzoxNDozNyAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIG1hbnk6IFJld3JvdGUgYnVpbGRzIHRvIHVzZSBBdXRvbWFrZSAxLjIuCgoJKiBBVVRIT1JTOiBOZXcgZmlsZS4KCSogbWFpbnRNYWtlZmlsZTogQ29udGFpbnMgbWFpbnRhaW5lci1vbmx5IG1ha2Ugc25pcHBldHMuCgkqIEdOVW1ha2VmaWxlOiBUaGlzIG5vdyBvbmx5IHJ1bnMgdGhlIGluaXRpYWwgYXV0byogdG9vbHMuCgkqIENPUFlJTkcsdGV4aW5mby50ZXgsbWtpbnN0YWxsZGlycyxpbnN0YWxsLXNoOiBSZW1vdmVkIChvYnRhaW5lZAoJYXV0b21hdGljYWxseSBieSBhdXRvbWFrZSkuCgkqIGNvbXBhdE1ha2VmaWxlOiBSZW1vdmVkIChub3QgbmVlZGVkIGFueW1vcmUpLgoJKiBSRUFETUUsYnVpbGQuc2guaW46IFJlbW92ZWQgKGJ1aWx0IGZyb20gdGVtcGxhdGVzKS4KCSogY29uZmlnLmguaW4sTWFrZWZpbGUuaW46IFJlbW92ZWQgKGJ1aWx0IGJ5IHRvb2xzKS4KCldlZCBBdWcgMTMgMDI6MjI6MDggMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYWtlLnRleGluZm86IFVwZGF0ZXMgZm9yIERPUy9XaW5kb3dzIGluZm9ybWF0aW9uIChFbGkgWmFyZXRza2lpKQoJKiBSRUFETUUsUkVBRE1FLkRPUzogRGl0dG8uCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSxmX210aW1lKTogRml4IEdQQVRIIGhhbmRsaW5nLgoJKiB2cGF0aC5jIChncGF0aF9zZWFyY2gpOiBEaXR0by4KCgkqIGZpbGUuYyAocmVuYW1lX2ZpbGUpOiBOZXcgZnVuY3Rpb246IHJlaGFzaCwgYnV0IGFsc28gcmVuYW1lIHRvCgl0aGUgaGFzaG5hbWUuCgkqIGZpbGVkZWYuaDogRGVjbGFyZSBpdC4KCgkqIHZhcmlhYmxlLmMgKG1lcmdlX3ZhcmlhYmxlX3NldF9saXN0cyk6IFJlbW92ZSBmcmVlKCkgb2YgdmFyaWFibGUKCXNldDsgc2luY2UgdmFyaW91cyBmaWxlcyBjYW4gc2hhcmUgdmFyaWFibGUgc2V0cyB3ZSBkb24ndCB3YW50IHRvCglmcmVlIHRoZW0gaGVyZS4KClR1ZSBBdWcgMTIgMTA6NTE6NTQgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBjb25maWd1cmUuaW46IFJlcXVpcmUgYXV0b2NvbmYgMi4xMgoKCSogbWFrZS50ZXhpbmZvOiBSZXBsYWNlIGFsbCAiY2Qgc3ViZGlyOyAkKE1BS0UpIiBleGFtcGxlcyB3aXRoIGEKCW1vcmUgc3R5bGlzdGljYWxseSBjb3JyZWN0ICJjZCBzdWJkaXIgJiYgJChNQUtFKSIuCgoJKiBtYWluLmM6IEdsb2JhbCB2YXJpYWJsZSBgY2xvY2tfc2tld19kZXRlY3RlZCcgZGVmaW5lZC4KCShtYWluKTogUHJpbnQgZmluYWwgd2FybmluZyBpZiBpdCdzIHNldC4KCSogbWFrZS5oOiBEZWNsYXJlIGl0LgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IFRlc3QgYW5kIHNldCBpdC4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IEFkZCBzcGVjaWFsIG9wdGltaXphdGlvbnMgZm9yCiAJImRvLW5vdGhpbmciIHJ1bGVzLCBjb250YWluaW5nIGp1c3QgdGhlIHNoZWxsIG5vLW9wICI6Ii4gIFRoaXMgaXMKIAl1c2VmdWwgZm9yIHRpbWVzdGFtcCBmaWxlcyBhbmQgY2FuIG1ha2UgYSByZWFsIGRpZmZlcmVuY2UgaWYgeW91CiAJaGF2ZSBhIGxvdCBvZiB0aGVtIChyZXF1ZXN0ZWQgYnkgRmVyZ3VzIEhlbmRlcnNvbiA8ZmpoQGNzLm11Lm96LmF1PikuCgoJKiBjb25maWd1cmUuaW4sTWFrZWZpbGUuaW46IFJld3JvdGUgdG8gdXNlIHRoZSBuZXcgYXV0b2NvbmYKCXByb2dyYW1fdHJhbnNmb3JtX25hbWUgbWFjcm8uCgoJKiBmdW5jdGlvbi5jIChmdW5jdGlvbl9zdHJpcCk6IFN0cmlwIG5ld2xpbmVzIGFzIHdlbGwgYXMgc3BhY2VzCglhbmQgVEFCcy4KCkZyaSBKdW4gIDYgMjM6NDE6MDQgMTk5NyAgUm9iIFR1bGxvaCA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBEYXRlc3RhbXBzIG9uIEZBVC1iYXNlZCBmaWxlcyBhcmUgcm91bmRlZCB0bwoJZXZlbiBzZWNvbmRzIHdoZW4gc3RvcmVkLCBzbyBpZiB0aGUgZGF0ZSBjaGVjayBmYWlscyBvbiBXSU5ET1dTMzIKCSBzeXN0ZW1zLCBzZWUgaWYgdGhpcyAib2ZmLWJ5LW9uZSIgZXJyb3IgaXMgdGhlIHByb2JsZW0uCgoJKiBHZW5lcmFsOiBJZiB5b3VyIFRaIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQgY29ycmVjdGx5Cgl0aGVuIGFsbCB5b3VyIHRpbWVzdGFtcHMgd2lsbCBiZSBvZmYgYnkgaG91cnMuICBTbywgc2V0IGl0IQoKTW9uIEFwciAgNyAwMjowNjoyMiAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NS4xCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IERlZmluZSAmIHVzZSB0aGUgJChHTE9CKSB2YXJpYWJsZSBzbwoJdGhhdCBpdCdzIHJlbW92ZWQgY29ycmVjdGx5IGZyb20gYnVpbGQuc2guaW4gd2hlbiBpdCdzIGJ1aWx0LgoKCSogY29uZmlndXJlLmluOiBPbiBTb2xhcmlzIHdlIGNhbiB1c2UgdGhlIGtzdGF0XyooKSBmdW5jdGlvbnMgdG8KCWdldCBsb2FkIGF2ZXJhZ2VzIHdpdGhvdXQgbmVlZGluZyBzcGVjaWFsIHBlcm1pc3Npb25zLiAgQWRkIGEKCWNoZWNrIGZvciAtbGtzdGF0IHRvIHNlZSBpZiB3ZSBoYXZlIGl0LgoKCSogZ2V0bG9hZGF2Zy5jIChnZXRsb2FkYXZnKTogVXNlIEhBVkVfTElCS1NUQVQgaW5zdGVhZCBvZiBTVU41IGFzCgl0aGUgdGVzdCB0byBlbmFibGUga3N0YXRfb3BlbigpLCBldGMuIHByb2Nlc3NpbmcuCgpGcmkgQXByICA0IDIwOjIxOjE4IDE5OTcgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiA8bG90cz46IEZpeGVzIHRvIHdvcmsgaW4gdGhlIERKR1BQIERPUyBlbnZpcm9ubWVudC4KCk1vbiBNYXIgMzEgMDI6NDI6NTIgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiBBZGRlZCBuZXcgZnVuY3Rpb24gJCh3b3JkbGlzdCkuCgoJKiBtYWtlLnRleGluZm8gKEZpbGVuYW1lIEZ1bmN0aW9ucyk6IERvY3VtZW50ICQod29yZGxpc3QpIGZ1bmN0aW9uLgoKCSogdnBhdGguYyAoYnVpbGRfdnBhdGhfbGlzdHMpOiBDb25zdHJ1Y3QgdGhlIEdQQVRIIHZhcmlhYmxlCglpbmZvcm1hdGlvbiBpbiB0aGUgc2FtZSBtYW5uZXIgd2UgdXNlZCB0byBjb25zdHJ1Y3QgVlBBVEguCgkoZ3BhdGhfc2VhcmNoKTogTmV3IGZ1bmN0aW9uIHRvIHNlYXJjaCBHUEFUSC4KCgkqIG1ha2UuaDogRGVjbGFyZSB0aGUgbmV3IGZ1bmN0aW9uLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBDYWxsIGl0LCBhbmQga2VlcCBWUEFUSCBpZiBpdCdzIGZvdW5kLgoKCSogbWFrZS50ZXhpbmZvIChTZWFyY2ggQWxnb3JpdGhtKTogRG9jdW1lbnQgR1BBVEggdmFyaWFibGUuCgpTdW4gTWFyIDMwIDIwOjU3OjE2IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogbWFpbi5jIChoYW5kbGVfbm9uX3N3aXRjaF9hcmd1bWVudCk6IERlZmluZWQgdGhlIE1BS0VDTURHT0FMUwoJdmFyaWFibGUgdG8gY29udGFpbiB0aGUgdXNlciBvcHRpb25zIHBhc3NlZCBpbiBvbiB0aGUgY21kIGxpbmUuCgoJKiBtYWtlLnRleGluZm8gKEdvYWxzKTogRG9jdW1lbnQgTUFLRUNNREdPQUxTIHZhcmlhYmxlLgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBQcmludCBhIHdhcm5pbmcgaWYgd2UgZGV0ZWN0IGEgY2xvY2sgc2tldwoJZXJyb3IsIHJhdGhlciB0aGFuIGZhaWxpbmcuCgoJKiBtYWluLmMgKG1haW4pOiBJZiB3ZSByZWJ1aWxkIGFueSBtYWtlZmlsZXMgYW5kIG5lZWQgdG8gcmUtZXhlYywKCWFkZCAiLW88bWtmaWxlPiIgb3B0aW9ucyBmb3IgZWFjaCBtYWtlZmlsZSByZWJ1aWx0IHRvIGF2b2lkCglpbmZpbml0ZSBsb29waW5nLgoKRnJpIE1hciAyOCAxNToyNjowNSAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVHJhY2sgd2hldGhlciB0aGUgbGFzdAoJYXJnIGluIHRoZSBjbWQgc3RyaW5nIHdhcyBlbXB0eSBvciBub3QgKFJvbGFuZCkuCgkoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IElmIHRoZSBzaGVsbCBsaW5lIGlzIGVtcHR5LAoJZG9uJ3QgZG8gYW55dGhpbmcgKFJvbGFuZCkuCgoJKiBnbG9iL2dsb2IuaCxnbG9iL2dsb2IuYyxnbG9iL2ZubWF0Y2guYyxnbG9iL2ZubWF0Y2guaDogSW5zdGFsbAoJdGhlIGxhdGVzdCBjaGFuZ2VzIGZyb20gdGhlIEdMSUJDIHZlcnNpb24gb2YgZ2xvYiAoVWxyaWNoIERyZXBwZXIpLgoKCSogZ2V0bG9hZGF2Zy5jLG1ha2Utc3Rkcy50ZXhpOiBOZXcgdmVyc2lvbiAoUm9sYW5kKS4KCgkqIChBTEwpOiBDaGFuZ2VkIFdJTjMyIHRvIFczMiBvciBXSU5ET1dTMzIgKFJNUykuCgpNb24gTWFyIDI0IDE1OjMzOjM0IDE5OTcgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiBSRUFETUUuVzMyOiBEZXNjcmliZSBwcmVsaW1pbmFyeSBGQVQgc3VwcG9ydC4KCgkqIGJ1aWxkX3czMi5iYXQ6IFVzZSBhIHZhcmlhYmxlIGZvciB0aGUgZmluYWwgZXhlIG5hbWUuCgoJKiBkaXIuYyAoZmluZF9kaXJlY3RvcnkpOiBXMzI6IEZpbmQgdGhlIGZpbGVzeXN0ZW0gdHlwZS4KCShkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcCk6IFczMjogZm9yIEZBVCBmaWxlc3lzdGVtcywgYWx3YXlzCglyZWhhc2ggc2luY2UgRkFUIGRvZXNuJ3QgY2hhbmdlIGRpcmVjdG9yeSBtdGltZSBvbiBjaGFuZ2UuCgoJKiBtYWluLmMgKGhhbmRsZV9ydW50aW1lX2V4Y2VwdGlvbnMpOiBXMzI6IEFkZCBhbgogCVVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlciBzbyB0aGF0IHdoZW4gbWFrZSBib21icyBkdWUgdG8gXkMgb3IgYQogCWJ1ZywgaXQgd29uJ3QgY2F1c2UgYSBHVUkgcmVxdWVzdG9yIHRvIHBvcCB1cCB1bmxlc3MgZGVidWcgaXMKIAl0dXJuZWQgb24uCgkobWFpbik6IENhbGwgaXQuCgpNb24gTWFyIDI0IDAwOjU3OjM0IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogY29uZmlndXJlLmluLCBjb25maWcuaC5pbiwgY29uZmlnLmFtaSwgY29uZmlnLmgtdm1zLCBjb25maWcuaC53MzI6CiAJQ2hlY2sgZm9yIG1lbW1vdmUoKSBmdW5jdGlvbi4KCgkqIG1ha2UuaCAoYmNvcHkpOiBJZiBtZW1tb3ZlKCkgYXZhaWxhYmxlLCBkZWZpbmUgYmNvcHkoKSB0byB1c2UgaXQuCglPdGhlcndpc2UganVzdCB1c2UgYmNvcHkoKS4gIERvbid0IHVzZSBtZW1jcHkoKTsgaXQncyBub3QgZ3VhcmFudGVlZAoJdG8gaGFuZGxlIG92ZXJsYXBwaW5nIG1vdmVzLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRml4IHNvbWUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMKCShyZXBvcnRlZCBieSBQdXJpZnkpLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBVc2UgYmNvcHkoKSBub3QKCXN0cmNweSgpOyBzdHJjcHkoKSBpc24ndCBndWFyYW50ZWVkIHRvIGhhbmRsZSBvdmVybGFwcGluZyBtb3Zlcy4KCgkqIE1ha2VmaWxlLmluOiBDaGFuZ2UgaW5zdGFsbC1pbmZvIG9wdGlvbiBgYC0taW5mb2RpcicnIHRvCglgYC0taW5mby1kaXInJyBmb3IgdXNlIHdpdGggbmV3IHRleGluZm8uCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiAkKGJhc2VuYW1lKSBhbmQgJChzdWZmaXgpIHNob3VsZAoJb25seSBzZWFyY2ggZm9yIHN1ZmZpeGVzIGFzIGZhciBiYWNrIGFzIHRoZSBsYXN0IGRpcmVjdG9yeSAoZS5nLiwKCW9ubHkgdGhlIGZpbmFsIGZpbGVuYW1lIGluIHRoZSBwYXRoKS4KClN1biBNYXIgMjMgMDA6MTM6MDUgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYWtlLnRleGluZm86IEFkZCBAZGlyY2F0ZWdvcnkvQGRpcmVudHJ5IGluZm9ybWF0aW9uLgoJKFRvcCk6IFJlbW92ZSBwcmV2aW91cyByZWZlcmVuY2UgdG8gKGRpcikgKGZyb20gUk1TKS4KCShTdGF0aWMgVXNhZ2UpOiBBZGQgImFsbDoiIHJ1bGUgdG8gZXhhbXBsZS4KCShBdXRvbWF0aWMgRGVwZW5kZW5jaWVzKTogZml4IC5kIGZpbGUgY3JlYXRpb24gZXhhbXBsZS4KCgkqIEluc3RhbGwgVlBBVEgrIHBhdGNoOgoKCSogZmlsZWRlZi5oIChzdHJ1Y3QgZmlsZSk6IEFkZCBpbiBobmFtZSBmaWVsZCB0byBzdG9yZSB0aGUgaGFzaGVkCiAgICAgICAgZmlsZW5hbWUsIGFuZCBhIGZsYWcgdG8gcmVtZW1iZXIgaWYgd2UncmUgdXNpbmcgdGhlIHZwYXRoIGZpbGVuYW1lCglvciBub3QuICBSZW5hbWVkIGEgZmV3IGZ1bmN0aW9ucyBmb3IgbW9yZSBjbGFyaXR5LgoKCSogZmlsZS5jIChsb29rdXBfZmlsZSxlbnRlcl9maWxlLGZpbGVfaGFzaF9lbnRlcik6IFN0b3JlIGZpbGVuYW1lcwoJaW4gdGhlIGhhc2ggdGFibGUgYmFzZWQgb24gdGhlaXIgImhhc2ggbmFtZSIuICBXZSBjYW4gY2hhbmdlIHRoaXMKCXdoaWxlIGtlZXBpbmcgdGhlIG9yaWdpbmFsIHRhcmdldCBpbiAibmFtZSIuCgkocmVoYXNoX2ZpbGUpOiBSZW5hbWVkIGZyb20gInJlbmFtZV9maWxlIiB0byBiZSBtb3JlIGFjY3VyYXRlLgoJQ2hhbmdlcyB0aGUgaGFzaCBuYW1lLCBidXQgbm90IHRoZSB0YXJnZXQgbmFtZS4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogTW9kaWZ5IC1kIG91dHB1dCBmb3IgbW9yZSBkZXRhaWxlZAogCVZQQVRIIGluZm8uICBJZiB3ZSBkb24ndCBuZWVkIHRvIHJlYnVpbGQsIHVzZSB0aGUgVlBBVEggbmFtZS4KCShmX210aW1lKTogRG9uJ3Qgc2VhcmNoIGZvciB2cGF0aCBpZiB3ZSdyZSBpZ25vcmluZyBpdC4gIENhbGwKIAlyZW5hbWVkIGZ1bmN0aW9uIHJlaGFzaF9maWxlLiAgQ2FsbCBuYW1lX210aW1lIGluc3RlYWQgb2YKIAlmaWxlX210aW1lLCB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gc2luY2UgdGhlIGZpbGUgd2Fzbid0CiAJYWN0dWFsbHkgcmVuYW1lZC4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogaWYgd2UgZmluZCBhbiBpbXBsaWNpdCBmaWxlIGluCglWUEFUSCwgc2F2ZSB0aGUgb3JpZ2luYWwgbmFtZSBub3QgdGhlIFZQQVRIIG5hbWUuCgoJKiBtYWtlLnRleGluZm8gKERpcmVjdG9yeSBTZWFyY2gpOiBBZGQgYSBzZWN0aW9uIG9uIHRoZSBuZXcgVlBBVEgKCWZ1bmN0aW9uYWxpdHkuCgpTdW4gRGVjICAxIDE4OjM2OjA0IDE5OTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogZGlyLmMgKGZpbGVfZXhpc3RzX3AsIGZpbGVfaW1wb3NzaWJsZSwgZmlsZV9pbXBvc3NpYmxlX3ApOiBJZgoJZGlybmFtZSBpcyBlbXB0eSByZXBsYWNlIGl0IGJ5IHRoZSBuYW1lIG9mIHRoZSByb290IGRpcmVjdG9yeS4KCU5vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yayAoeWV0KSBmb3IgVzMyLCBBbWlnYSwgb3IgVk1TLgoKVHVlIE9jdCAwOCAxMzo1NzowMyAxOTk2ICBSb2IgVHVsbG9oICA8dHVsbG9oQHRpdm9saS5jb20+CgoJKiBtYWluLmMgKG1haW4pOiBXMzIgYnVnIGZpeCBmb3IgUEFUSCB2YXJzLgoKVHVlIFNlcCAxNyAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGZpbGVkZWYuaCAoTkVXX01USU1FKTogRG9uJ3QgYXNzdW1lIHRoYXQgdGltZV90IGlzIGEgc2lnbmVkCiAJMzItYml0IHF1YW50aXR5LgoKCSogbWFrZS5oOiAoQ0hBUl9CSVQsIElOVEVHRVJfVFlQRV9TSUdORUQsIElOVEVHRVJfVFlQRV9NQVhJTVVNLAogCUlOVEVHRVJfVFlQRV9NSU5JTVVNKTogTmV3IG1hY3Jvcy4KClR1ZSBBdWcgMjcgMDE6MDY6MzQgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAYmFhbHBlcmF6aW0uZnJvYi5jb20+CgoJKiBWZXJzaW9uIDMuNzUgcmVsZWFzZWQuCgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBQcmludCBvdXQgYnVnLXJlcG9ydGluZyBhZGRyZXNzLgoKTW9uIEF1ZyAyNiAxOTo1NTo0NyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBiYWFscGVyYXppbS5mcm9iLmNvbT4KCgkqIG1haW4uYyAocHJpbnRfZGF0YV9iYXNlKTogRG9uJ3QgZGVjbGFyZSBjdGltZTsgaGVhZGVycyBkbyBpdCBmb3IgdXMKIAlhbHJlYWR5LgoKU3VuIEp1bCAyOCAxNTozNzowOSAxOTk2ICBSb2IgVHVsbG9oICh0dWxsb2hAdGl2b2xpLmNvbSkKCgkqIHczMi9wYXRoc3R1ZmYuYzogVHVybmVkIGNvbnZlcnRfdnBhdGhfdG9fdzMyKCkgaW50byBhCglyZWFsIGZ1bmN0aW9uLiBUaGlzIHdhcyBkb25lIHNvIHRoYXQgVlBBVEggY291bGQgY29udGFpbgoJd2hpdGUgc3BhY2Ugc2VwYXJhdGVkIHBhdGhuYW1lcy4gUGxlYXNlIG5vdGUgdGhhdCBkaXJlY3RvcnkKCXBhdGhzIChpbiBWUEFUSC92cGF0aCBjb250ZXh0KSBjb250YWluaW5nIHdoaXRlIHNwYWNlIGFyZSBub3QKCXN1cHBvcnRlZCAoanVzdCBhcyB0aGV5IGFyZSBub3QgdW5kZXIgVW5peCkuIFNlZSBSRUFETUUuVzMyCglmb3Igc3VnZ2VzdGlvbnMuCgoJKiB3MzIvaW5jbHVkZS9wYXRoc3R1ZmYuaDogQWRkZWQgcHJvdG90eXBlIGZvciB0aGUgbmV3CglmdW5jdGlvbiBjb252ZXJ0X3ZwYXRoX3RvX3czMi4gRGVsZXRlZCBtYWNybyBmb3Igc2FtZS4KCgkqIFJFQURNRS5XMzI6IEFkZGVkIHNvbWUgbm90ZXMgYWJvdXQgd2h5IEkgY2hvc2Ugbm90IHRvIHRyeQoJYW5kIHN1cHBvcnQgcGF0aG5hbWVzIHdoaWNoIGNvbnRhaW4gd2hpdGUgc3BhY2UgYW5kIHNvbWUKCXdvcmthcm91bmQgc3VnZ2VzdGlvbnMuCgpUaHUgSnVsIDI1IDE5OjUzOjMxIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBHTlVtYWtlZmlsZSAobWtkZXAtbm9saWIpOiBVc2UgLU1NIG9wdGlvbiB1bmNvbmRpdGlvbmFsbHkuCgoJKiBWZXJzaW9uIDMuNzQuNy4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IEJhY2sgdXAgUCB0byBwb2ludCBhdCBudWxsIHRlcm1pbmF0b3IKCXdoZW4ga2lsbGluZyBmaW5hbCBzcGFjZSBhbmQgZGFzaCBiZWZvcmUgc2V0dGluZyBNRkxBR1MuCgoJRnJvbSBSb2JlcnQgSG9laG5lIDxyb2JlcnQuaG9laG5lQE1hdGhlbWF0aWsuVFUtQ2hlbW5pdHouREU+OgoJKiBkaXIuYyBbX19NU0RPU19fICYmIERKR1BQID4gMV06IEluY2x1ZGUgPGxpYmMvZG9zaW8uaD4gYW5kIGRlZmluCglgX19vcGVuZGlyX2ZsYWdzJyBpbml0aWFsaXplZCB0byAwLgoJKGRvc2lmeSkgW19fTVNET1NfXyAmJiBESkdQUCA+IDFdOiBSZXR1cm4gbmFtZSB1bmNoYW5nZWQgaWYgX1VTRV9MRk4uCgkoZmluZF9kaXJlY3RvcnkpIFtfX01TRE9TX18gJiYgREpHUFAgPiAxXTogSWYgX1VTRV9MR04sIHNldAoJX19vcGVuZGlyX2ZsYWdzIHRvIF9fT1BFTkRJUl9QUkVTRVJWRV9DQVNFLgoKCSogdm1zZnVuY3Rpb25zLmMgKHZtc19zdGF0KTogYHN5cyRkYXNzZ24gKERldkNoYW4pOycgYWRkZWQgYnkga2thZW1wZi4KCgkqIEdOVW1ha2VmaWxlICh3MzJmaWxlcyk6IEFkZCBOTWFrZWZpbGUuCgoJKiBOTWFrZWZpbGUgKExERkxBR1NfZGVidWcpOiBWYWx1ZSBmaXhlZCBieSB0dWxsb2guCgpTYXQgSnVsIDIwIDEyOjMyOjEwIDE5OTYgIEtsYXVzIEvkbXBmIChra2FlbXBmQHByb2dpcy5kZSkKCgkqIHJlbWFrZS5jIChmX210aW1lKSBbVk1TXTogQWRkIG1pc3NpbmcgYGlmJyBjb25kaXRpb25hbCBmb3IgZnV0dXJlCgltb2R0aW1lIGNoZWNrLgoJKiBjb25maWcuaC12bXMsIG1ha2VmaWxlLnZtcywgcmVhZG1lLnZtcywgdm1zaWZ5LmM6IFVwZGF0ZSBhZGRyZXNzLgoKU2F0IEp1bCAyMCAwNToyOTo0MyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBSZXF1aXJlIGF1dG9jb25mIDIuMTAgb3IgbGF0ZXIuCgpGcmkgSnVsIDE5IDE2OjU3OjI3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuNi4KCgkqIEdOVW1ha2VmaWxlICh3MzJmaWxlcyk6IE5ldyB2YXJpYWJsZS4KCShkaXN0ZmlsZXMpOiBBZGQgaXQuCgkqIHczMjogVXBkYXRlZCBieSBSb2IgVHVsbG9oLgoKCSogbWFrZWZpbGUudm1zIChMT0FETElCRVMpOiBGaXggdHlwby4KClN1biBKdWwgMTQgMTI6NTk6MjcgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRml4IHVwICNlbHNlLCAjZW5kaWZzLgoKCSogY29uZmlnaC5kb3M6IERlZmluZSBIQVZFX0RJUkVOVF9IIGluc3RlYWQgb2YgRElSRU5ULgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBEb24ndCBjb21wYXJlIE1USU1FIHRvIE5PVyBpZiBNVElNRSA9PSAtMS4KCgkqIFZlcnNpb24gMy43NC41LgoKCSogbWFpbi5jIChtYWluKTogRXhpdCB3aXRoIHN0YXR1cyAyIHdoZW4gdXBkYXRlX2dvYWxfY2hhaW4gcmV0dXJucyAyLgoKU2F0IEp1biAyMiAxNDo1NjowNSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3IgX3N5c19zaWdsaXN0LgoJKiBtYWtlLmggW0hBVkVfX1NZU19TSUdMSVNUXTogRG9uJ3QgdGVzdCB0aGlzOyBqdXN0IHB1bnQgaWYgdGhlcmUgaXMKCW5vIHN0cnNpZ25hbCBvciBzeXNfc2lnbGlzdC4KCgkqIHJlYWQuYyAoY29uZGl0aW9uYWxfbGluZSk6IFN0cmlwIHdzIGluIGBpZmVxIChhICwgYiknIHNvIGl0IGlzIHRoZQoJc2FtZSBhcyBgaWZlcSAoYSwgYiknLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEb24ndCBjYWxsIGRpZSBpZiBoYW5kbGluZ19mYXRhbF9zaWduYWwuCgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IEFsbG93IHJlbmFtaW5nIDo6IHRvIDogd2hlbiBsYXR0ZXIgaXMKCW5vbi10YXJnZXQsIG9yIDogdG8gOjogd2hlbiBmb3JtZXIgaXMgbm9uLXRhcmdldC4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IENhbGwgYmxvY2tfc2lncy4KCShibG9ja19zaWdzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHN0YXJ0X2pvYl9jb21tYW5kLgoJKHJlYXBfY2hpbGRyZW4pOiBCbG9jayBmYXRhbCBzaWduYWxzIGFyb3VuZCByZW1vdmluZyBkZWFkIGNoaWxkIGZyb20KCWNoYWluIGFuZCBhZGp1c3Rpbmcgam9iX3Nsb3RzX3VzZWQuCgkqIGpvYi5oOiBEZWNsYXJlIGJsb2NrX3NpZ3MuCgoJKiByZW1vdGUtc3R1Yi5jIChyZW1vdGVfc2V0dXAsIHJlbW90ZV9jbGVhbnVwKTogTmV3IChlbXB0eSkgZnVuY3Rpb25zLgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIHJlbW90ZV9zZXR1cC4KCShkaWUpOiBDYWxsIHJlbW90ZV9jbGVhbnVwLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBRdWllc2NlbnQgdmFsdWUgb2Ygc2hlbGxfZnVuY3Rpb25fcGlkIGlzCgl6ZXJvLCBub3QgLTEuCgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBBZGQgOTYgdG8gY29weXJpZ2h0IHllYXJzLgoKU2F0IEp1biAxNSAyMDozMDowMSAxOTk2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHJlYWQuYyAoZmluZF9jaGFyX3VucXVvdGUpOiBBdm9pZCBjYWxsaW5nIHN0cmxlbiBvbiBldmVyeSBjYWxsCglqdXN0IHRvIHRocm93IGF3YXkgdGhlIHZhbHVlIG1vc3Qgb2YgdGhlIHRpbWUuCgpTdW4gSnVuICAyIDEyOjI0OjAxIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBQcmVwZW5kICctJyB0byBBUkdWWzFdIGlmIGl0IGNvbnRhaW5zCglubyAnPScsIHJlZ2FyZGxlc3Mgb2YgQVJHQy4KCShkZWZpbmVfbWFrZWZsYWdzKTogRWxpZGUgbGVhZGluZyAnLScgZnJvbSBNQUtFRkxBR1MgdmFsdWUgaWYgZmlyc3QKCXdvcmQgaXMgc2hvcnQgb3B0aW9uLCByZWdhcmRsZXNzIG9mIFdPUkRTLgoKV2VkIE1heSAyMiAxNzoyNDo1MSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogbWFrZWZpbGUudm1zOiBTZXQgTE9BRExJQkVTLgoJKiBtYWtlZmlsZS5jb20gKGxpbmtfdXNpbmdfbGlicmFyeSk6IEZpeCB0eXBvLgoKV2VkIE1heSAxNSAxNzozNzoyNiAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogZGlyLmMgKHByaW50X2Rpcl9kYXRhX2Jhc2UpOiBVc2UgJWxkIGRldiBhbmQgaW5vIGFuZCBjYXN0IHRoZW0gdG8KCWxvbmcuCgpXZWQgTWF5IDE1IDEwOjE0OjE0IENEVCAxOTk2ICBSb2IgVHVsbG9oICA8dHVsbG9oQHRpdm9saS5jb20+CgoJKiBkaXIuYzogVzMyIGRvZXMgbm90IHN1cHBvcnQgaW5vZGUuIEZvciBub3csIGZ1bGx5IHF1YWxpZmllZAoJcGF0aG5hbWUgYWxvbmcgd2l0aCBzdF9tdGltZSB3aWxsIGJlIGtleXMgZm9yIGZpbGVzLgoJRml4ZWQgcHJvYmxlbSB3aGVyZSB2cGF0aCBjYW4gYmUgY29uZnVzZWQgd2hlbiBmaWxlcwoJYXJlIGFkZGVkIHRvIGEgZGlyZWN0b3J5IGFmdGVyIHRoZSBkaXJlY3RvcnkgaGFzIGFscmVhZHkgYmVlbgoJcmVhZCBpbi4gVGhlIGNvZGUgbm93IGF0dGVtcHRzIHRvIHJlcmVhZCB0aGUgZGlyZWN0b3J5IGlmIGl0CglkaXNjb3ZlcnMgdGhhdCB0aGUgZGF0ZXN0YW1wIG9uIHRoZSBkaXJlY3RvcnkgaGFzIGNoYW5nZWQgc2luY2UKCWl0IHdhcyBjYWNoZWQgYnkgbWFrZS4gVGhpcyBwcm9ibGVtIG9ubHkgc2VlbXMgdG8gb2NjdXIgb24gVzMyCglyaWdodCBub3cgc28gaXQgaXMgbHVtcGVkIHVuZGVyIHBvcnQgI2lmZGVmIFdJTkRPV1MzMi4KCgkqIGZ1bmN0aW9uLmM6IFczMjogY2FsbCBzdWJwcm9jIGxpYnJhcnkgKENyZWF0ZVByb2Nlc3MoKSkgaW5zdGVhZCBvZgoJZm9yay9leGVjLgoKCSogam9iLmM6IFczMjogQWRkZWQgdGhlIGNvZGUgdG8gZG8gZm9yay9leGVjL3dhaXRwaWQgc3R5bGUgcHJvY2Vzc2luZwoJb24gVzMyIHN5c3RlbXMgdmlhIGNhbGxzIHRvIHN1YnByb2MgbGlicmFyeS4KCgkqIG1haW4uYzogVzMyOiBTZXZlcmFsIHRoaW5ncyBhZGRlZCBoZXJlLiBGaXJzdCwgdGhlcmUgaXMgY29kZQoJZm9yIGRlYWxpbmcgd2l0aCBQQVRIIGFuZCBTSEVMTCBkZWZhdWx0cy4gTWFrZSB0cmllcyB0byBmaWd1cmUKCW91dCBpZiB0aGUgdXNlciBoYXMgJVBBVEglIHNldCBpbiB0aGUgZW52aXJvbm1lbnQgYW5kIHNldHMgaXQgdG8KCSVQYXRoJSBpZiBpdCBpcyBub3Qgc2V0IGFscmVhZHkuIE1ha2UgYWxzbyBsb29rcyB0byBzZWUgaWYgc2guZXhlCglpcyBhbnl3aGVyZSB0byBiZSBmb3VuZC4gQ29kZSBwYXRoIHRocm91Z2ggam9iLmMgd2lsbCBjaGFuZ2UKCWJhc2VkIG9uIGV4aXN0ZW5jZSBvZiBhIHdvcmtpbmcgQm91cm5lIHNoZWxsLiBUaGUgY2hlY2tpbmcgZm9yCglkZWZhdWx0IHNoZWxsIGlzIGRvbmUgdHdpY2U6IG9uY2UgYmVmb3JlIG1ha2VmaWxlcyBhcmUgcmVhZCBpbgoJYW5kIGFnYWluIGFmdGVyLiBGYWxsIGJhY2sgdG8gTVNET1Mgc3R5bGUgZXhlY3V0aW9uIG1vZGUgaWYgbm8gc2guZXhlCglpcyBmb3VuZC4gQWxzbyBhZGRlZCBzb21lIGRlYnVnIHN1cHBvcnQgdGhhdCBhbGxvd3MgdXNlciB0byBwYXVzZSBtYWtlCgl3aXRoIC1EIHN3aXRjaCBhbmQgYXR0YWNoIGEgZGVidWdnZXIuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yCglkZWJ1Z2dpbmcgcmVjdXJzaXZlIGNhbGxzIHRvIG1ha2Ugd2hlcmUgcHJvYmxlbXMgYXBwZWFyIG9ubHkgaW4gdGhlCglzdWItbWFrZS4KCgkqIG1ha2UuaDogVzMyOiBBIGZldyBtYWNyb3MgYW5kIGhlYWRlciBmaWxlcyBmb3IgVzMyIHN1cHBvcnQuCgoJKiBtaXNjLmM6IFczMjogQWRkZWQgYSBmdW5jdGlvbiBlbmRfb2ZfdG9rZW5fdzMyKCkgdG8gYXNzaXN0CglpbiBwYXJzaW5nIGNvZGUgaW4gcmVhZC5jLgoKCSogcmVhZC5jOiBXMzI6IEZpeGVzIHNpbWlsYXIgdG8gTVNET1Mgd2hpY2ggYWxsb3cgY29sb24gdG8KCWFwcGVhciBpbiBmaWxlbmFtZXMuIFVzZSBvZiBjb2xvbiBpbiBmaWxlbmFtZXMgd291bGQgb3RoZXJ3aXNlCgljb25mdXNlIG1ha2UuCgoJKiByZW1ha2UuYzogVzMyOiBBZGRlZCBpbmNsdWRlIG9mIGlvLmggdG8gZWxpbWluYXRlIGNvbXBpbGVyCgl3YXJuaW5ncy4gQWRkZWQgc29tZSBjb2RlIHRvIGRlZmF1bHQgTElCRElSIGlmIGl0IGlzIG5vdCBzZXQKCW9uIFczMi4KCgkqIHZhcmlhYmxlLmM6IFczMjogQWRkZWQgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIFBhdGgvUEFUSAoJYW5kIGNvbnZlcnRpbmcgdGhlbSB0byBzZW1pY29sb24gc2VwYXJhdGVkIGxpc3RzIGZvciBtYWtlJ3MKCWludGVybmFsIHVzZS4gTmV3IGZ1bmN0aW9uIHN5bmNfUGF0aF9lbnZpcm9ubWVudCgpCgl3aGljaCBpcyBjYWxsZWQgaW4gam9iLmMgYW5kIGZ1bmN0aW9uLmMgYmVmb3JlIGNyZWF0aW5nIGEgbmV3Cglwcm9jZXNzLiBDYWxsZXIgbXVzdCBzZXQgUGF0aCBpbiBlbnZpcm9ubWVudCBzaW5jZSB3ZSBkb24ndAoJaGF2ZSBmb3JrKCkgdG8gZG8gdGhpcyBmb3IgdXMuCgoJKiB2cGF0aC5jOiBXMzI6IEFkZGVkIGRldGVjdGlvbiBmb3IgZmlsZW5hbWVzIGNvbnRhaW5pbmcKCWZvcndhcmQgb3IgYmFja3dhcmQgc2xhc2hlcy4KCgkqIE5NYWtlZmlsZTogVzMyOiBWaXN1YWwgQyBjb21wYXRpYmxlIG1ha2VmaWxlIGZvciB1c2Ugd2l0aCBubWFrZS4KCVVzZSB0aGlzIHRvIGJ1aWxkIEdOVSBtYWtlIHRoZSBmaXJzdCB0aW1lIG9uIFdpbmRvd3MgTlQgb3IgV2luZG93cyA5NS4KCgkqIFJFQURNRS5XMzI6IFczMjogQ29udGFpbnMgc29tZSBoZWxwZnVsIG5vdGVzLgoKCSogYnVpbGRfdzMyLmJhdDogVzMyOiBJZiB5b3UgZG9uJ3QgbGlrZSBubWFrZSwgdXNlIHRoaXMgdGhlIGZpcnN0Cgl0aW1lIHlvdSBidWlsZCBHTlUgbWFrZSBvbiBXaW5kb3dzIE5UIG9yIFdpbmRvd3MgOTUuCgoJKiBjb25maWcuaC5XMzI6IFczMiB2ZXJzaW9uIG9mIGNvbmZpZy5oCgoJKiBzdWJwcm9jLmJhdDogVzMyOiBBIGJhdCBmaWxlIHVzZWQgdG8gYnVpbGQgdGhlCglzdWJwcm9jIGxpYnJhcnkgZnJvbSB0aGUgdG9wLWxldmVsIE5NYWtlZmlsZS4gTmVlZGVkIGJlY2F1c2UKCVdJbmRvd3MgOTUgKG5tYWtlKSBkb2Vzbid0IGFsbG93IHlvdSB0byBjZCBpbiBhIG1ha2UgcnVsZS4KCgkqIHczMi9pbmNsdWRlL2RpcmVudC5oCgkqIHczMi9jb21wYXQvZGlyZW50LmM6IFczMjogb3BlbmRpciwgcmVhZGRpciwgY2xvc2VkaXIsIGV0Yy4KCgkqIHczMi9pbmNsdWRlL3BhdGhzdHVmZi5oOiBXMzI6IHVzZWQgYnkgZmlsZXMgbmVlZGVkIGZ1bmN0aW9ucwoJZGVmaW5lZCBpbiBwYXRoc3R1ZmYuYyAocHJvdG90eXBlcykuCgoJKiB3MzIvaW5jbHVkZS9zdWJfcHJvYy5oOiBXMzI6IHByb3RvdHlwZXMgZm9yIHN1YnByb2MubGliIGZ1bmN0aW9ucy4KCgkqIHczMi9pbmNsdWRlL3czMmVyci5oOiBXMzI6IHByb3RvdHlwZXMgZm9yIHczMmVyci5jLgoKCSogdzMyL3BhdGhzdHVmZi5jOiBXMzI6IEZpbGUgYW5kIFBhdGgvUGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4KCgkqIHczMi9zdWJwcm9jL2J1aWxkLmJhdDogVzMyOiBidWlsZCBzY3JpcHQgZm9yIHN1YnByb2MgbGlicmFyeQoJaWYgeW91IGRvbid0IHdpc2ggdG8gdXNlIG5tYWtlLgoKCSogdzMyL3N1YnByb2MvTk1ha2VmaWxlOiBXMzI6IFZpc3VhbCBDIGNvbXBhdGlibGUgbWFrZWZpbGUgZm9yIHVzZQoJd2l0aCBubWFrZS4gVXNlZCB0byBidWlsZCBzdWJwcm9jIGxpYnJhcnkuCgoJKiB3MzIvc3VicHJvYy9taXNjLmM6IFczMjogc3VicHJvYyBsaWJyYXJ5IHN1cHBvcnQgY29kZQoJKiB3MzIvc3VicHJvYy9wcm9jLmg6IFczMjogc3VicHJvYyBsaWJyYXJ5IHN1cHBvcnQgY29kZQoJKiB3MzIvc3VicHJvYy9zdWJfcHJvYy5jOiBXMzI6IHN1YnByb2MgbGlicmFyeSBzb3VyY2UgY29kZQoJKiB3MzIvc3VicHJvYy93MzJlcnIuYzogVzMyOiBzdWJwcm9jIGxpYnJhcnkgc3VwcG9ydCBjb2RlCgpNb24gTWF5IDEzIDE0OjM3OjQyIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuNC4KCgkqIEdOVW1ha2VmaWxlICh2bXNmaWxlcyk6IEZpeCB0eXBvLgoKCSogR05VbWFrZWZpbGUgKGFtaWdhZmlsZXMpOiBBZGQgYW1pZ2EuaC4KClN1biBNYXkgMTIgMTk6MTk6NDMgMTk5NiAgQWFyb24gRGlndWxsYSAgIDxkaWd1bGxhQGZoLWtvbnN0YW56LmRlPgoKCSogZGlyLmM6IE5ldyBmdW5jdGlvbjogYW1pZ2FmeSgpIHRvIGZvbGQgZmlsZW5hbWVzCglDaGFuZ2VzIEhBU0goKSB0byBIQVNISSgpIHRvIGZvbGQgZmlsZW5hbWVzIG9uIEFtaWdhLgoJU3RyaW5nY29tcGFyZXMgdXNlIHN0cmllcSgpIGluc3RlYWQgb2Ygc3RyZXEoKQoJVGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIEFtaWdhIGlzICIiIGluc3RlYWQgb2YgIi4iCgkqIGZpbGUuYzogTGlrZXdpc2UuCgoJKiBhbWlnYS5jOiBOZXcgZnVuY3Rpb24gd2lsZGNhcmRfZXhwYW5zaW9uKCkuIEFsbG93cyB0byB1c2UKCUFtaWdhIHdpbGRjYXJkcyB3aXRoICQod2lsZGNhcmQgKQoKCSogYW1pZ2EuaDogTmV3IGZpbGUuIFByb3RvdHlwZXMgZm9yIGFtaWdhLmMKCgkqIGZ1bmN0aW9uLmM6IFVzZSBzcGVjaWFsIGZ1bmN0aW9uIHdpbGRjYXJkX2V4cGFuc2lvbigpIGZvcgoJJCh3aWxkY2FyZCApIHRvIGFsbG93IEFtaWdhIHdpbGRjYXJkcwoJVGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIEFtaWdhIGlzICIiIGluc3RlYWQgb2YgIi4iCgoJKiBqb2IuYzogTm8gUGlwZXMgb24gQW1pZ2EsIHRvbwoJKGxvYWRfdG9vX2hpZ2gpIE5laXRoZXIgb24gQW1pZ2EKCUVOViB2YXJpYWJsZSBvbiBBbWlnYSBhcmUgaW4gYSBzcGVjaWFsIGRpcmVjdG9yeSBhbmQgYXJlIG5vdAoJcGFzc2VkIGFzIHRoaXJkIGFyZ3VtZW50IHRvIG1haW4oKS4KCgkqIGpvYi5oOiBObyBlbnZwIG9uIEFtaWdhCgoJKiBtYWtlLmg6IEFkZGVkIEhBU0hJKCkuIFRoaXMgaXMgdGhlIHNhbWUgYXMgSEFTSCgpIGJ1dCBjb252ZXJ0cwoJaXQncyBzZWNvbmQgcGFyYW1ldGVyIHRvIGxvd2VyY2FzZSBvbiBBbWlnYSB0byBmb2xkIGZpbGVuYW1lcy4KCgkqIG1haW4uYzogKG1haW4pLCB2YXJpYWJsZS5jIENoYW5nZWQgaGFuZGxpbmcgb2YgRU5WLXZhcnMuIE1ha2UKCXN0b3JlcyBub3cgdGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgb25seSBhbmQgcmVhZHMgdGhlaXIgY29udGVudHMKCXdoZW4gdGhleSBhcmUgYWNjZXNzZWQgdG8gcmVmbGVjdCB0aGF0IHRoZXNlIHZhcmlhYmxlcyBhcmUgcmVhbGx5CglnbG9iYWwgKGllLiB0aGV5IENBTiBjaGFuZ2UgV0hJTEUgbWFrZSBydW5zICEpIFRoaXMgaGFuZGxpbmcgaXMKCW1hZGUgaW4gbG9va3VwX3ZhcmlhYmxlKCkKCgkqIE1ha2VmaWxlLmFtaTogcmVuYW1lZCBmaWxlLmggdG8gZmlsZWRlcC5oCglVcGRhdGVkIGRlcGVuZGVuY2llcwoKCSogcmVhZC5jOiAiZmluZF9zZW1pY29sb24iIGlzIGRlY2xhcmVkIGFzIHN0YXRpYyBidXQgbmV2ZXIgZGVmaW5lZC4KCU5vIGRpZmZlcmVuY2UgYmV0d2VlbiBNYWtlZmlsZSBhbmQgbWFrZWZpbGUgb24gQW1pZ2E7IGFkZGVkCglTTWFrZWZpbGUgdG8gKmRlZmF1bHRfbWFrZWZpbGVzW10uCgkocmVhZF9tYWtlZmlsZSkgU0FTL0Mgd2FudCdzIHR3b19jb2xvbiBhbmQgcGF0dGVybl9wZXJjZW50IGJlIHNldAoJYmVmb3JlIHVzZS4KCVRoZSBjdXJyZW50IGRpcmVjdG9yeSBvbiBBbWlnYSBpcyAiIiBpbnN0ZWFkIG9mICIuIgoJU3RyYW5nZSAjZW5kaWYgbW92ZWQuCgoJKiBSRUFETUUuQW1pZ2E6IHVwZGF0ZWQgZmVhdHVyZSBsaXN0CgoJKiBTTWFrZWZpbGU6IFVwZGF0ZWQgZGVwZW5kZW5jaWVzCgoJKiB2YXJpYWJsZS5jOiBIYW5kbGluZyBvZiBFTlYgdmFyaWFibGUgaGFwcGVucyBpbnNpZGUgbG9va3VwX3ZhcmlhYmxlKCkKClNhdCBNYXkgMTEgMTc6NTg6MzIgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogQ291bnQgcGFyZW5zIGluIGxocyB2YXJpYWJsZQoJcmVmcyB0byBhdm9pZCBzZWVpbmcgPS86PS8rPSBpbnNpZGUgYSByZWYuCgpUaHUgTWF5ICA5IDEzOjU0OjQ5IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpIFtTSUdRVUlUXTogTWFrZSBTSUdRVUlUIGNoZWNrCgljb25kaXRpb25hbC4KCgkqIG1haW4uYyAobWFpbik6IFVzZSB1bnNpZ25lZCBmb3IgZnJlYWQgcmV0dXJuLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFVzZSBgaW50JyBmb3IgY2hhciBhcmcgdG8gYXZvaWQgd2lkZW5pbmcKCWNvbmZsaWN0IGlzc3Vlcy4KCSogZGVwLmg6IEZpeCBwcm90b3R5cGUuCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pIFtfQU1JR0FdOiBGaXggc29tZSB0eXBvcy4KCShwYXRzdWJzdF9leHBhbmQpOiBNYWtlIGxlbiB2YXJzIHVuc2lnbmVkLgoKCSogR05VbWFrZWZpbGUgKGdsb2JmaWxlcyk6IEFkZCBBbWlnYURPUyBzdXBwb3J0IGZpbGVzLgoJKGRpc3RmaWxlcyk6IEFkZCAkKGFtaWdhZmlsZXMpLgoJKGFtaWdhZmlsZXMpOiBOZXcgdmFyaWFibGUuCgpUaHUgTm92ICA3IDEwOjE4OjE2IDE5OTUgIEFhcm9uIERpZ3VsbGEgICA8ZGlndWxsYUBmaC1rb25zdGFuei5kZT4KCgkqIEFkZGVkIEFtaWdhIHN1cHBvcnQgaW4gY29tbWFuZHMuYywgZGlyLmMsIGZ1bmN0aW9uLmMsCglqb2IuYywgbWFpbi5jLCBtYWtlLmgsIHJlYWQuYywgcmVtYWtlLmMKCSogY29tbWFuZHMuYzogQW1pZ2EgaGFzIG5laXRoZXIgU0lHSFVQIG5vciBTSUdRVUlUCgkqIGRpci5jOiBBbWlnYSBoYXMgZmlsZW5hbWVzIHdpdGggVXBwZXItIGFuZCBMb3dlcmNhc2UsCglidXQgIkZpbGVOYW1lIiBpcyB0aGUgc2FtZSBhcyAiZmlsZW5hbWUiLiBBZGRlZCBzdHJpZXEoKQoJd2hpY2ggaXMgdXNlIHRvIGNvbXBhcmUgZmlsZW5hbWVzLiBUaGlzIGlzIGxpa2Ugc3RyZXEoKQoJb24gYWxsIG90aGVyIHN5c3RlbXMuIEFsc28gdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcwoJIi4iIHVuZGVyIEFtaWdhRE9TLgoJKiBmdW5jdGlvbi5jOiBPbiBBbWlnYSwgdGhlIGVudmlyb25tZW50IGlzIG5vdCBwYXNzZWQgYXMgZW52cCwKCXRoZXJlIGFyZSBubyBwaXBlcyBhbmQgQW1pZ2EgY2FuJ3QgZm9yay4gVXNlIG15IG93biBmdW5jdGlvbgoJdG8gY3JlYXRlIGEgbmV3IGNoaWxkLgoJKiBqb2IuYzogZGVmYXVsdF9zaGVsbCBpcyAiIiAoVGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGNob29zZXMKCWEgc2hlbGwgZm9yIG1lKS4gSGF2ZSB0byB1c2UgdGhlIHNhbWUgd29ya2Fyb3VuZCBhcyBNU0RPUyBmb3IKCXJ1bm5pbmcgYmF0Y2ggY29tbWFuZHMuIEFkZGVkIEhBVkVfU1lTX1BBUkFNX0guIE5PRklMRSBpc24ndAoJa25vd24gb24gQW1pZ2EuIENsb25lZCBjb2RlIHRvIHJ1biBjaGlsZHJlbiBmcm9tIE1TRE9TLiBPd24KCXZlcnNpb24gb2Ygc2hfY2hhcnNbXSBhbmQgc2hfY21kc1tdLiBObyBkdXAyKCkgb3IgZHVwKCkgb24gQW1pZ2EuCgkqIG1haW4uYzogRm9yY2Ugc3RhY2sgdG8gMjAwMDAgYnl0ZXMuIFJlYWQgZW52aXJvbm1lbnQgZnJvbSBFTlY6CglkZXZpY2UuIE9uIEFtaWdhLCBleGVjX2NvbW1hbmQoKSBkb2VzIHJldHVybiwgc28gSSBleGl0KCkKCWFmdGVyd2FyZHMuCgkqIG1ha2UuaDogQWRkZWQgc3RyaWVxKCkgdG8gY29tcGFyZSBmaWxlbmFtZXMuCgkqIHJlYWQuYzogQW1pZ2EgbmVlZHMgc3BlY2lhbCBleHRlbnNpb24gdG8gaGF2ZSBwYXNzd2QuIE9ubHkKCW9uZSBpbmNsdWRlLWRpci4gIk1ha2VmaWxlIiBhbmQgIm1ha2VmaWxlIiBhcmUgdGhlIHNhbWUuCglBZGRlZCAiU01ha2VmaWxlIi4gIEFkZGVkIHNwZWNpYWwgY29kZSB0byBoYW5kbGUgZGV2aWNlIG5hbWVzICh4eHg6KQoJYW5kICIuLyIgaW4gcnVsZXMuCgkqIHJlbWFrZS5jOiBPbmx5IG9uZSBsaWItZGlyLiBBbWlnYSBsaW5rLWxpYnMgYXJlIG5hbWVkICIlcy5saWIiCglpbnN0ZWFkIG9mICJsaWIlcy5hIi4KCSogbWFpbi5jLCBydWxlLmMsIHZhcmlhYmxlLmM6IEF2b2lkIGZsb2F0cyBhdCBhbGwgY29zdHMuCgkqIHZwYXRoLmM6IEdldCByaWQgb2YgYXMgbWFueSBhbGxvY2EoKXMgYXMgcG9zc2libGUuCgpUaHUgTWF5ICA5IDEzOjIwOjQzIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBHcm9rIGBzaW5jbHVkZScgYXMgYWxpYXMgZm9yIGAtaW5jbHVkZScuCgpXZWQgTWFyIDIwIDA5OjUyOjI3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJKiBHTlVtYWtlZmlsZSAodm1zZmlsZXMpOiBOZXcgdmFyaWFibGUuCgkoZGlzdGZpbGVzKTogSW5jbHVkZSAkKHZtc2ZpbGVzKS4KClR1ZSBNYXIgMTkgMjA6MjE6MzQgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCglNZXJnZWQgVk1TIHBvcnQgZnJvbSBLbGF1cyBLYWVtcGYgPGtrYWVtcGZAZGlkeW11cy5ybWkuZGU+LgoJKiBtYWtlLmggKFBBUkFNUyk6IE5ldyBtYWNyby4KCSogY29uZmlnLmgtdm1zOiBOZXcgZmlsZS4KCSogbWFrZWZpbGUuY29tOiBOZXcgZmlsZS4KCSogbWFrZWZpbGUudm1zOiBOZXcgZmlsZS4KCSogcmVhZG1lLnZtczogTmV3IGZpbGUuCgkqIHZtc2Rpci5oOiBOZXcgZmlsZS4KCSogdm1zZnVuY3Rpb25zLmM6IE5ldyBmaWxlLgoJKiB2bXNpZnkuYzogTmV3IGZpbGUuCgkqIGZpbGUuaDogUmVuYW1lZCB0byBmaWxlZGVmLmggdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBWTVMgc3lzdGVtIGhkci4KCSogYXIuYzogQWRkZWQgcHJvdG90eXBlcyBhbmQgY2hhbmdlcyBmb3IgVk1TLgoJKiBjb21tYW5kcy5jOiBMaWtld2lzZS4KCSogY29tbWFuZHMuaDogTGlrZXdpc2UuCgkqIGRlZmF1bHQuYzogTGlrZXdpc2UuCgkqIGRlcC5oOiBMaWtld2lzZS4KCSogZGlyLmM6IExpa2V3aXNlLgoJKiBleHBhbmQuYzogTGlrZXdpc2UuCgkqIGZpbGUuYzogTGlrZXdpc2UuCgkqIGZ1bmN0aW9uLmM6IExpa2V3aXNlLgoJKiBpbXBsaWNpdC5jOiBMaWtld2lzZS4KCSogam9iLmM6IExpa2V3aXNlLgoJKiBqb2IuaDogTGlrZXdpc2UuCgkqIG1haW4uYzogTGlrZXdpc2UuCgkqIG1ha2UuaDogTGlrZXdpc2UuCgkqIG1pc2MuYzogTGlrZXdpc2UuCgkqIHJlYWQuYzogTGlrZXdpc2UuCgkqIHJlbWFrZS5jOiBMaWtld2lzZS4KCSogcmVtb3RlLXN0dWIuYzogTGlrZXdpc2UuCgkqIHJ1bGUuYzogTGlrZXdpc2UuCgkqIHJ1bGUuaDogTGlrZXdpc2UuCgkqIHZhcmlhYmxlLmM6IExpa2V3aXNlLgoJKiB2YXJpYWJsZS5oOiBMaWtld2lzZS4KCSogdnBhdGguYzogTGlrZXdpc2UuCgkqIGNvbXBhdE1ha2VmaWxlIChzcmNzKTogUmVuYW1lIGZpbGUuaCB0byBmaWxlZGVmLmguCgpTYXQgQXVnIDE5IDIzOjExOjAwIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChjaGVja19kZXApOiBGb3IgYSBzZWNvbmRhcnkgZmlsZSwgdHJ5IGltcGxpY2l0IGFuZAoJZGVmYXVsdCBydWxlcyBpZiBhcHByb3ByaWF0ZS4KCldlZCBBdWcgIDIgMDQ6Mjk6NDIgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKGNoZWNrX2RlcCk6IElmIGFuIGludGVybWVkaWF0ZSBmaWxlIGV4aXN0cywKCWRvIGNvbnNpZGVyIGl0cyBhY3R1YWwgZGF0ZS4KClN1biBKdWwgMzAgMDA6NDk6NTMgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5oIChzdHJ1Y3QgZmlsZSk6IE5ldyBmaWVsZCBgc2Vjb25kYXJ5Jy4KCSogZmlsZS5jIChzbmFwX2RlcHMpOiBDaGVjayBmb3IgLklOVEVSTUVESUFURSBhbmQgLlNFQ09OREFSWS4KCShyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IERvbid0IGRlbGV0ZSAuU0VDT05EQVJZIGZpbGVzLgoKU2F0IE1hciAgMiAxNjoyNjo1MiAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaGFybGllLWJyb3duLmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKHNyY3MpOiBBZGQgZ2V0b3B0Lmg7IHByZXBlbmQgJChzcmNkaXIpLyB0byBnZXRvcHQqLgoKRnJpIE1hciAgMSAxMjowNDo0NyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaGFybGllLWJyb3duLmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0LjMuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IE1vdmUgZnV0dXJlIG1vZHRpbWUgY2hlY2sgYmVmb3JlIEZJTEUgaXMKCWNsb2JiZXJlZCBieSA6OiBsb29wLgoKCSogZGlyLmM6IFVzZSBjYW5vbmljYWwgY29kZSBmcm9tIGF1dG9jb25mIG1hbnVhbCBmb3IgZGlyZW50IGluY2x1ZGUuCglbX0RfTkFNTEVOXTogUmVkZWZpbmUgTkFNTEVOIHVzaW5nIHRoaXMuCgkoZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3ApOiBVc2UgTkFNTEVOIG1hY3JvLgoJKHJlYWRfZGlyc3RyZWFtKSBbX0RJUkVOVF9IQVZFX0RfTkFNTEVOXTogT25seSBzZXQgZF9uYW1sZW4gI2lmIHRoaXMuCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEFkZCBtaXNzaW5nIGJhY2tzbGFzaC4KCldlZCBGZWIgMjggMDM6NTY6MjAgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IFJlbW92ZSArIHByZWZpeCBmcm9tIFJDUyBjbWRzLgoJKGRlZmF1bHRfdmFyaWFibGVzKTogUHV0ICsgcHJlZml4IGluICQoQ0hFQ0tPVVQsdikgdmFsdWUgaW5zdGVhZC4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogQ2hlY2sgZm9yIGZ1dHVyZSB0aW1lc3RhbXBzOyBnaXZlIGVycm9yIGFuZCBtYXJrCglmaWxlIGFzICJmYWlsZWQgdG8gdXBkYXRlIi4KCkZyaSBKYW4gMTIgMTg6MDk6MzYgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jOiBEb24ndCBkZWNsYXJlIHVuYmxvY2tfc2lnczsgam9iLmggYWxyZWFkeSBkb2VzLgoKU2F0IEphbiAgNiAxNjoyNDo0NCAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogYWNjb25maWcuaCAoSEFWRV9TWVNDT05GX09QRU5fTUFYKTogI3VuZGVmIHJlbW92ZWQuCgoJKiBqb2IuYyAoTkdST1VQU19NQVgpOiBEb24ndCB0cnkgdG8gZGVmaW5lIHRoaXMgbWFjcm8uCgpGcmkgRGVjIDIyIDE4OjQ0OjQ0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAoR0VUT1BULCBHRVRPUFRfU1JDLCBHTE9CKTogVmFyaWFibGVzIHJlbW92ZWQuCgkob2Jqcywgc3Jjcyk6IEluY2x1ZGUgdGhlaXIgdmFsdWVzIGhlcmUgaW5zdGVhZCBvZiByZWZlcmVuY2VzLgoKVGh1IERlYyAxNCAwNjoyMToyOSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0LjIuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IENhbGwgdW5ibG9ja19zaWdzIGFmdGVyIHN0YXJ0X2pvYl9jb21tYW5kLgoKVGh1IERlYyAxNCAwNzoyMjowMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkdWFsaXR5LmdudS5haS5taXQuZWR1PgoKCSogZGlyLmMgKGRpcl9zZXR1cF9nbG9iKTogRG9uJ3QgdXNlIGxzdGF0OyBnbG9iIG5ldmVyIGNhbGxzIGl0IGFueXdheS4KCUF2b2lkICYgYmVmb3JlIGZ1bmN0aW9uIG5hbWVzIHRvIHNpbGVuY2UgYm9ndXMgc3Vub3M0IGNvbXBpbGVyLgoKCSogY29uZmlndXJlLmluOiBSZW1vdmUgY2hlY2sgZm9yIGBzeXNjb25mIChfU0NfT1BFTl9NQVgpJy4KClR1ZSBEZWMgMTIgMDA6NDg6NDIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC4xLgoKCSogZGlyLmMgKHJlYWRfZGlyc3RyZWFtKTogRml4IGJyYWlubzogZmlsbCBpbiB0aGUgYnVmZmVyIHdoZW4gbm90CglyZWFsbG9jYXRpbmcgaXQhCgpNb24gRGVjIDExIDIyOjI2OjE1IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtaXNjLmMgKGNvbGxhcHNlX2NvbnRpbnVhdGlvbnMpOiBGaXggc2tpcHBpbmcgb2YgdHJhaWxpbmcgXHMgc28KCWl0IGNhbiBuZXZlciBkZXJlZmVyZW5jZSBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuCgoJKiByZWFkLmMgKGZpbmRfc2VtaWNvbG9uKTogRnVuY3Rpb24gcmVtb3ZlZC4KCShyZWFkX21ha2VmaWxlKTogRG9uJ3QgdXNlIGZpbmRfc2VtaWNvbG9uIG9yIHJlbW92ZV9jb21tZW50cyBmb3IKCXJ1bGUgbGluZXMuICBVc2UgZmluZF9jaGFyX3VucXVvdGUgZGlyZWN0bHkgYW5kIGhhbmRsZSBxdW90ZWQgY29tbWVudHMKCXByb3Blcmx5LgoKCSogZGVmYXVsdC5jOiBSZW1vdmUgYWxsIFtNX1hFTklYXSBjb2RlLgoKCSogZGlyLmMgW0hBVkVfRF9OQU1MRU5dOiBEZWZpbmUgdGhpcyBmb3IgX19HTlVfTElCUkFSWV9fID4gMS4KCShEX05BTUxFTik6IE1hY3JvIHJlbW92ZWQuCgkoRkFLRV9ESVJfRU5UUlkpOiBOZXcgbWFjcm8uCgkoZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3ApOiBUZXN0IEhBVkVfRF9OQU1MRU4gaW5zdGVhZCBvZiB1c2luZwoJRF9OQU1MRU4uCgkocmVhZF9kaXJzdHJlYW0pOiBSZXR1cm4gYSBzdHJ1Y3QgZGlyZW50ICogZm9yIG5ldyBnbG9iIGludGVyZmFjZS4KCShpbml0X2Rpcik6IEZ1bmN0aW9uIHJlbW92ZWQuCgkoZGlyX3NldHVwX2dsb2IpOiBOZXcgZnVuY3Rpb24uCgkqIG1haW4uYyAobWFpbik6IERvbid0IGNhbGwgaW5pdF9kaXIuCgkqIHJlYWQuYyAobXVsdGlfZ2xvYik6IENhbGwgZGlyX3NldHVwX2dsb2Igb24gb3VyIGdsb2JfdCBhbmQgdXNlCglHTE9CX0FMVERJUkZVTkMgZmxhZy4KCgkqIG1pc2MuYyAoc2FmZV9zdGF0KTogRnVuY3Rpb24gcmVtb3ZlZC4KCSogcmVhZC5jLCBjb21tYW5kcy5jLCByZW1ha2UuYywgdnBhdGguYzogVXNlIHBsYWluIHN0YXQgaW5zdGVhZCBvZgoJc2FmZV9zdGF0LgoKU2F0IE5vdiAyNSAyMDozNToxOCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgW0hBVkVfVU5JT05fV0FJVF06IEluY2x1ZGUgc3lzL3dhaXQuaC4KCgkqIG1haW4uYyAobG9nX3dvcmtpbmdfZGlyZWN0b3J5KTogTWFkZSBnbG9iYWwuCglQcmludCBlbnRlcmluZyBtc2cgb25seSBvbmNlLgoJKiBtYWtlLmggKGxvZ193b3JraW5nX2RpcmVjdG9yeSk6IERlY2xhcmUgaXQuCgkqIG1pc2MuYyAobWVzc2FnZSk6IFRha2UgbmV3IGFyZyBQUkVGSVguICBQcmludCAibWFrZTogIiBvbmx5IGlmCglub256ZXJvLiAgQ2FsbCBsb2dfd29ya2luZ19kaXJlY3RvcnkuCgkqIHJlbWFrZS5jOiBQYXNzIG5ldyBhcmcgaW4gYG1lc3NhZ2UnIGNhbGxzLgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBQYXNzIG5ldyBhcmcgdG8gYG1lc3NhZ2UnOyBmaXgKCWludmVydGVkIHRlc3QgaW4gdGhhdCBjYWxsLgoKVHVlIE5vdiAyMSAxOTowMToxMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogVXNlIGBtZXNzYWdlJyB0byBwcmludCB0aGUgY29tbWFuZCwKCWFuZCBjYWxsIGl0IHdpdGggbnVsbCBpZiB0aGUgY29tbWFuZCBpcyBzaWxlbnQuCgkqIHJlbWFrZS5jICh0b3VjaF9maWxlKTogVXNlIG1lc3NhZ2UgaW5zdGVhZCBvZiBwcmludGYuCgpUdWUgT2N0IDEwIDE0OjU5OjMwIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGVudGVyX2NvbW1hbmRfbGluZV9maWxlKTogQmFyZiBpZiBOQU1FIGlzICIiLgoKU2F0IFNlcCAgOSAwNjozMzoyMCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEB3aGl6LWJhbmcuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21tYW5kcy5jIChkZWxldGVfdGFyZ2V0KTogSWdub3JlIHVubGluayBmYWlsdXJlIGlmIGl0IGlzIEVOT0VOVC4KClRodSBBdWcgMTcgMTU6MDg6NTcgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIGdldGR0YWJsZXNpemUuCgkqIGpvYi5jIChnZXRkdGFibGVzaXplKTogUmVtb3ZlIGRlY2xzIGFuZCBtYWNyb3MuCgpUaHUgQXVnIDEwIDE5OjEwOjAzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBPbWl0IGNvbW1hbmQgbGluZSB2YXJpYWJsZQogCWRlZmluaXRpb25zIGZyb20gTUZMQUdTIHZhbHVlLgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pIFtBSUFNQUddOiBDaGVjayBmb3IgemVybyBNRU1CRVJfT0ZGU0VULAogCWluZGljYXRpbmcgYSB2YWxpZCwgYnV0IGVtcHR5LCBhcmNoaXZlLgoKTW9uIEF1ZyAgNyAxNTo0MDowMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZGlyLmMgKGZpbGVfaW1wb3NzaWJsZV9wKTogQ29ycmVjdGx5IHJlc2V0IEZJTEVOQU1FIHRvIG5hbWUKIAl3aXRoaW4gZGlyZWN0b3J5IGJlZm9yZSBoYXNoIHNlYXJjaC4KCgkqIGpvYi5jIChjaGlsZF9lcnJvcik6IERvIG5vdGhpbmcgaWYgSUdOT1JFRCB1bmRlciAtcy4KCgkqIGpvYi5jIChleGVjX2NvbW1hbmQpOiBDb3JyZWN0bHkgdXNlIEFSR1ZbMF0gZm9yIHNjcmlwdCBuYW1lIHdoZW4KIAlydW5uaW5nIHNoZWxsIGRpcmVjdGx5LgoKVHVlIEF1ZyAgMSAxNDozOToxNCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKGNoaWxkX2V4ZWN1dGVfam9iKTogQ2xvc2UgU1RESU5fRkQgYW5kIFNURE9VVF9GRCBhZnRlcgogCWR1cCdpbmcgZnJvbSB0aGVtLiAgRG9uJ3QgdHJ5IHRvIGNsb3NlIGFsbCBleGNlc3MgZGVzY3JpcHRvcnM7CiAJZ2V0ZHRhYmxlc2l6ZSBtaWdodCByZXR1cm4gYSBodWdlIHZhbHVlLiAgQW55IG9wZW4gZGVzY3JpcHRvcnMgaW4KIAl0aGUgcGFyZW50IHNob3VsZCBoYXZlIEZEX0NMT0VYRUMgc2V0LgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogU2V0IEZEX0NMT0VYRUMgZmxhZyBvbiBCQURfU1RESU4gZGVzY3JpcHRvci4KClR1ZSBKdW4gMjAgMDM6NDc6MTUgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogUHJvcGVybHkgYXBwZW5kIGRlZmF1bHQgbWFrZWZpbGVzCiAJdG8gdGhlIGVuZCBvZiB0aGUgYHJlYWRfbWFrZWZpbGVzJyBjaGFpbi4KCkZyaSBNYXkgMTkgMTY6MzY6MzIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NCByZWxlYXNlZC4KCldlZCBNYXkgMTAgMTc6NDM6MzQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43My4zLgoKVHVlIE1heSAgOSAxNzoxNToyMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKCQoaW5mb2RpcikvbWFrZS5pbmZvKTogTWFrZSBzdXJlICQkZGlyIGlzIHNldCBpbgogCWluc3RhbGwtaW5mbyBjbWQuCgpXZWQgTWF5ICAzIDE1OjU2OjA2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmaWxlLmMgKHByaW50X2ZpbGUpOiBHcm9rIHVwZGF0ZV9zdGF0dXMgb2YgMSBmb3IgLXEuCgpUaHUgQXByIDI3IDEyOjM5OjM1IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzMuMi4KCldlZCBBcHIgMjYgMTc6MTU6NTcgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBGaXggaW52ZXJ0ZWQgdGVzdCB0byBiYWlsIHVuZGVyCiAJLW4gZm9yIHNpZ25hbCBjYXNlLiAgQmFpbCB1bmRlciAtcSBvciAtdC4KCVNraXAgZmlsZXMgd2l0aCB1cGRhdGVfc3RhdHVzPT0tMS4KCgkqIGpvYi5jIChqb2JfbmV4dF9jb21tYW5kKTogU2tpcCBlbXB0eSBsaW5lcy4KCShuZXdfam9iKTogRG9uJ3QgdGVzdCB0aGUgcmV0dXJuIG9mIGpvYl9uZXh0X2NvbW1hbmQuCglKdXN0IGxldCBzdGFydF93YWl0aW5nX2pvYiBoYW5kbGUgdGhlIGNhc2Ugb2YgZW1wdHkgY29tbWFuZHMuCgpXZWQgQXByIDE5IDAzOjI1OjU0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmdW5jdGlvbi5jIFtfX01TRE9TX19dOiBJbmNsdWRlIDxmY250bC5oPi4gIEZyb20gREogRGVsb3JpZS4KCgkqIFZlcnNpb24gMy43My4xLgoKU2F0IEFwciAgOCAxNDo1MzoyNCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogU2V0IEZJTEUtPnVwZGF0ZV9zdGF0dXMgdG8gemVybwogCWlmIGl0J3MgLTEuCgpXZWQgQXByICA1IDAwOjIwOjI0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzMgcmVsZWFzZWQuCgpUdWUgTWFyIDI4IDEzOjI1OjQ2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBGaXhlZCBicmFpbm8gaW4gYXNzZXJ0LgoKCSogVmVyc2lvbiAzLjcyLjEzLgoKTW9uIE1hciAyNyAwNToyOToxMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jOiBBdm9pZCBzdHJpbmcgaW4gYXNzZXJ0IGV4cHJlc3Npb24uICBTb21lIHN5c3RlbXMgYXJlIGJyb2tlbi4KCkZyaSBNYXIgMjQgMDA6MzI6MzIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAobWFpbik6IEhhbmRsZSAxIGFuZCAyIHJldHVybnMgZnJvbSB1cGRhdGVfZ29hbF9jaGFpbgogCW1ha2VmaWxlIHJ1biBwcm9wZXJseS4KCgkqIFZlcnNpb24gMy43Mi4xMi4KCgkqIG1haW4uYyAoaGFuZGxlX25vbl9zd2l0Y2hfYXJndW1lbnQpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKIAlkZWNvZGVfc3dpdGNoZXMuCgkoZGVjb2RlX3N3aXRjaGVzKTogU2V0IG9wdGluZCB0byAwIHRvIHJlaW5pdGlhbGl6ZSBnZXRvcHQsIG5vdCB0byAxLgoJV2hlbiBnZXRvcHRfbG9uZyByZXR1cm5zIEVPRiwgYnJlYWsgdGhlIGxvb3AgYW5kIGhhbmRsZSByZW1haW5pbmcgYXJncwogCXdpdGggYSBzaW1wbGUgc2Vjb25kIGxvb3AuCgoJKiByZW1ha2UuYyAocmVtYWtlX2ZpbGUpOiBTZXQgdXBkYXRlX3N0YXR1cyB0byAyIGluc3RlYWQgb2YgMSBmb3IKIAlubyBydWxlIHRvIG1ha2UuICBNZW50aW9uIHBhcmVudCAoZGVwZW5kZW50KSBpbiBlcnJvciBtZXNzYWdlLgoJKHVwZGF0ZV9maWxlXzEpOiBIYW5kbGUgRklMRS0+dXBkYXRlX3N0YXR1cyA9PSAyIGluIC1kIHByaW50b3V0LgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQsIHJlYXBfY2hpbGRyZW4pOiBTZXQgdXBkYXRlX3N0YXR1cyB0byAyCiAJaW5zdGVhZCBvZiAxIGZvciBmYWlsZWQgY29tbWFuZHMuCgpUdWUgTWFyIDIxIDE2OjIzOjM4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpOiBGdW5jdGlvbiByZW1vdmVkICh3YXMgYWxyZWFkeSAjaWYgMCdkIG91dCkuCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIEFDX1RZUEVfR0VUR1JPVVBTOyBub3RoaW5nIG5lZWRzIGl0IGFueSBtb3JlLgoKRnJpIE1hciAxNyAxNTo1Nzo0MCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmJhdDogV3JpdGUgQENQUEZMQUdTQCB0cmFuc2xhdGlvbi4KCk1vbiBNYXIgMTMgMDA6NDU6NTkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBSZWFycmFuZ2VkIGBsKGEgYiknIC0+IGBsKGEpIGwoYiknIGxvb3AKIAl0byBub3Qgc2tpcCB0aGUgZWx0IGltbWVkaWF0ZWx5IHByZWNlZGluZyBgbCguLi4nLgoKRnJpIE1hciAxMCAxMzo1Njo0OSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjExLgoKCSogcmVhZC5jIChmaW5kX2NoYXJfdW5xdW90ZSk6IE1ha2Ugc2Vjb25kIGFyZyBhIHN0cmluZyBvZiBzdG9wCiAJY2hhcnMgaW5zdGVhZCBvZiBhIHNpbmdsZSBzdG9wIGNoYXIuICBTdG9wIHdoZW4gYW55IGNoYXIgaW4gdGhlCiAJc3RyaW5nIGlzIGhpdC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoZmluZF9zZW1pY29sb24pOiBQYXNzIHN0b3AgY2hhcnMgIiM7IiB0byBvbmUgZmluZF9jaGFyX3VucXVvdGUgY2FsbCwKCWluc3RlYWQgb2YgdXNpbmcgdHdvIGNhbGxzLiAgSWYgdGhlIG1hdGNoIGlzIG5vdCBhIDsgYnV0IGEgIywKIAlyZXR1cm4gemVyby4KCSogbWlzYy5jOiBDaGFuZ2VkIGZpbmRfY2hhcl91bnF1b3RlIGNhbGxlcnMgaGVyZSB0b28uCgoJKiBWZXJzaW9uIDMuNzIuMTAuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUsIHBhcnNlX2ZpbGVfc2VxKTogRml4IHR5cG8gX19NU19ET1NfXyAtPgogCV9fTVNET1NfXy4KCgkqIEdOVW1ha2VmaWxlIChnbG9iZmlsZXMpOiBBZGQgZ2xvYi9jb25maWd1cmUuYmF0LgoJKGRpc3RmaWxlcyk6IEFkZCBjb25maWdoLmRvcywgY29uZmlndXJlLmJhdC4KCldlZCBNYXIgIDggMTM6MTA6NTcgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCglGaXhlcyBmb3IgTVMtRE9TIGZyb20gREogRGVsb3JpZS4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlLCBwYXJzZV9maWxlX3NlcSkgW19fTVNfRE9TX19dOiBEb24ndCBzZWUgOgogCWFzIHNlcGFyYXRvciBpbiAiQzpcLi4uIi4KCSogY29uZmlnaC5kb3MgKFNURENfSEVBREVSUyk6IERlZmluZSBvbmx5IGlmIHVuZGVmaW5lZC4KCShIQVZFX1NZU19QQVJBTV9IKTogRG9uJ3QgZGVmaW5lIHRoaXMuCgkoSEFWRV9TVFJFUlJPUik6IERlZmluZSB0aGlzLgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCkgW19fTVNET1NfX106IEZpeCB0eXBvcy4KCgkqIFZlcnNpb24gMy43Mi45LgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBSZXNldCBvcHRpbmQgdG8gMSBpbnN0ZWFkIG9mIDAuCgpUdWUgTWFyICA3IDE3OjMxOjA2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBJZiBub24tb3B0aW9uIGFyZyBpcyAiLSIsIGlnbm9yZSBpdC4KCk1vbiBNYXIgIDYgMjM6NTc6MzggMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi44LgoKV2VkIEZlYiAyMiAyMToyNjozNiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjcuCgpUdWUgRmViIDIxIDIyOjEwOjQzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBQYXNzIG1pc3NpbmcgYXJnIHRvIHRtcG5hbS4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHN0cnNpZ25hbC4KCSogam9iLmMgKGNoaWxkX2Vycm9yKTogVXNlIHN0cnNpZ25hbC4KCSogbWFpbi5jIChtYWluKTogRG9uJ3QgY2FsbCBzaWduYW1lX2luaXQgI2lmZGVmIEhBVkVfU1RSU0lHTkFMLgoKCSogbWlzYy5jIChzdHJlcnJvcik6IEZpeCBzd2FwcGVkIGFyZ3MgaW4gc3ByaW50Zi4KCk1vbiBGZWIgMTMgMTE6NTA6MDggMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoQ0ZMQUdTLCBMREZMQUdTKTogRG9uJ3Qgc2V0IHRoZXNlIHZhcmlhYmxlcy4KCkZyaSBGZWIgMTAgMTg6NDQ6MTIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IEFkZCA5NSB0byBjb3B5cmlnaHQgeWVhcnMuCgoJKiBWZXJzaW9uIDMuNzIuNi4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFJlbWVtYmVyIHRvIGNhbGwgbm90aWNlX2ZpbmlzaGVkX2ZpbGUKIAl1bmRlciAtbiB3aGVuIG5vdCByZWN1cnNpbmcuICBUbyBkbyB0aGlzLCBjb25zb2xpZGF0ZSB0aGF0IGNvZGUKIAl1bmRlciB0aGUgZW1wdHkgY29tbWFuZCBjYXNlIGFuZCBnb3RvIHRoZXJlIGZvciB0aGUgLW4gY2FzZS4KClR1ZSBGZWIgIDcgMTM6MzY6MDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1ha2UuaCBbISBTVERDX0hFQURFUlNdOiBEb24ndCBkZWNsYXJlIHFzb3J0LiAgU3VuIGhlYWRlcnMKIAlkZWNsYXJlIGl0IGludC4KCk1vbiBGZWIgIDYgMTc6Mzc6MDEgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZvciBib2d1cyBsaW5lIHN0YXJ0aW5nIHdpdGggdGFiLCBpZ25vcmUKIAlpdCBpZiBibGFuayBhZnRlciByZW1vdmluZyBjb21tZW50cy4KCgkqIG1haW4uYzogQ2FzdCByZXN1bHRzIG9mIGBhbGxvY2EnIHRvIGBjaGFyIConLgoJKiBleHBhbmQuYzogTGlrZXdpc2UuCgpTdW4gRmViICA1IDE4OjM1OjQ2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuNS4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIG1rdGVtcC4KCSogbWFpbi5jIChtYWluKSBbISBIQVZFX01LVEVNUF06IFVzZSB0bXBuYW0gaW5zdGVhZCBvZiBta3RlbXAuCgoJKiBjb25maWd1cmUuaW4gKG1ha2VfY3Zfc3lzY29uZl9vcGVuX21heCk6IE5ldyBjaGVjayBmb3IgYHN5c2NvbmYKIAkoX1NDX09QRU5fTUFYKScuCgkqIGFjY29uZmlnLmg6IEFkZGVkICN1bmRlZiBIQVZFX1NZU0NPTkZfT1BFTl9NQVguCgkqIGpvYi5jIFtIQVZFX1NZU0NPTkZfT1BFTl9NQVhdIChnZXRkdGFibGVzaXplKTogRGVmaW5lIGFzIG1hY3JvCiAJdXNpbmcgc3lzY29uZi4KCkZyaSBKYW4gMjcgMDQ6NDI6MDkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogV2hlbiAhTVVTVF9NQUtFLCBkb24ndCBzZXQKIAlGSUxFLT51cGRhdGVfc3RhdHVzIHRvIHplcm8gYmVmb3JlIGNhbGxpbmcgbm90aWNlX2ZpbmlzaGVkX2ZpbGUuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBUb3VjaCBvbmx5IHdoZW4gRklMRS0+dXBkYXRlX3N0YXR1cyBpcyB6ZXJvLgoJKHJlbWFrZV9maWxlKTogU2V0IEZJTEUtPnVwZGF0ZV9zdGF0dXMgdG8gemVybyBhZnRlciBub3QgY2FsbGluZwoJZXhlY3V0ZV9maWxlX2NvbW1hbmQgYW5kIGRlY2lkaW5nIHRvIHRvdWNoIGluc3RlYWQuCgpUaHUgSmFuIDI2IDAxOjI5OjMyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGRlYnVnX3NpZ25hbF9oYW5kbGVyKTogTmV3IGZ1bmN0aW9uOyB0b2dnbGVzIGRlYnVnX2ZsYWcuCgkobWFpbik6IEhhbmRsZSBTSUdVU1IxIHdpdGggdGhhdC4KCk1vbiBKYW4gMTYgMTU6NDY6NTYgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChyZWFsY2xlYW4pOiBSZW1vdmUgSW5mbyBmaWxlcy4KClN1biBKYW4gMTUgMDg6MjM6MDkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi40LgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogU2F2ZSBhbmQgcmVzdG9yZSBlbnZpcm9uIGFyb3VuZCB2Zm9yawogICAgICAgIGNhbGwuCgkoc2VhcmNoX3BhdGgpOiBGdW5jdGlvbiAjaWYgMCdkIG91dC4KCShleGVjX2NvbW1hbmQpOiBVc2UgZXhlY3ZwIGluc3RlYWQgb2Ygc2VhcmNoX3BhdGguCgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kKTogUmV3cm90ZSBjb21wdXRlZCB2YXJpYWJsZSBuYW1lIGFuZAoJc3Vic3RpdHV0aW9uIHJlZmVyZW5jZSBoYW5kbGluZyB0byBiZSBzaW1wbGVyLiAgRmlyc3QgZXhwYW5kIHRoZQoJZW50aXJlIHRleHQgYmV0d2VlbiB0aGUgcGFyZW5zIGlmIGl0IGNvbnRhaW5zIGFueSAkcywgdGhlbiBleGFtaW5lCgl0aGUgcmVzdWx0IG9mIHRoYXQgZm9yIHN1YnRpdHV0aW9uIHJlZmVyZW5jZXMgYW5kIGRvIG5vIGZ1cnRoZXIKCWV4cGFuc2lvbiB3aGlsZSBwYXJzaW5nIHRoZW0uCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEhhbmRsZSAiIHF1b3RpbmcgdG9vLAoJd2hlbiBubyBiYWNrc2xhc2gsICQgb3IgYCBjaGFyYWN0ZXJzIGFwcGVhciBpbnNpZGUgdGhlIHF1b3Rlcy4KCgkqIGNvbmZpZ3VyZS5pbiAodW5pb24gd2FpdCBjaGVjayk6IElmIFdFWElUU1RBVFVTIGFuZCBXVEVSTVNJRyBhcmUKICAgICAgICBkZWZpbmVkLCBqdXN0IHVzZSBpbnQuCgpUdWUgSmFuIDEwIDA2OjI3OjI3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbX19ocHV4XTogUmVtb3ZlIHNwZWNpYWwKCWRlZmluaXRpb24gb2YgQVJGTEFHUy4gIEV4aXN0ZW5jZSBvZiB0aGUgYGYnIGZsYWcgaXMgbm90Cgljb25zaXN0ZW50IGFjcm9zcyBIUFVYIHZlcnNpb25zOyBhbmQgb25lIG1pZ2h0IGJlIHVzaW5nIEdOVSBhcgoJYW55d2F5LgoKCSogY29tcGF0TWFrZWZpbGUgKGNsZWFuKTogRG9uJ3QgcmVtb3ZlIEluZm8gZmlsZXMuCgoJKiBjb21wYXRNYWtlZmlsZSAoY2hlY2spOiBSZW1vdmUgZ3JhdHVpdG91cyB0YXJnZXQgZGVjbGFyYXRpb24uCgpTYXQgSmFuICA3IDExOjM4OjIzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAoRVRBR1MsIENUQUdTKTogRG9uJ3QgdXNlIC10LgoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpIFtjcmF5XTogU3VidHJhY3QgMSBsaWtlIFtfX2hwdXhdLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBGb3IgLS1oZWxwLCBwcmludCB1c2FnZSB0byBzdGRvdXQuCgpNb24gRGVjICA1IDEyOjQyOjE4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuMy4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogRG8gc2V0X2NvbW1hbmRfc3RhdGUgKEZJTEUsCgljc19ub3Rfc3RhcnRlZCkgb25seSBpZiBvbGQgc3RhdGUgd2FzIGRlcHNfcnVubmluZy4KCk1vbiBOb3YgMjggMTQ6MjQ6MDMgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYik6IFVzZSBzZXRfY29tbWFuZF9zdGF0ZS4KCgkqIGJ1aWxkLnRlbXBsYXRlIChDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZS4KCShwcmVmaXgsIGV4ZWNfcHJlZml4KTogU2V0IGZyb20gQC4uLkAuCgkoY29tcGlsYXRpb24gbG9vcCk6IFBhc3MgJENQUEZMQUdTIHRvIGNvbXBpbGVyLgoKCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogTWFrZSBpdCBleGVjdXRhYmxlLgoKCSogR05VbWFrZWZpbGUgKGdsb2JmaWxlcyk6IEFkZCBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZS4KCgkqIFZlcnNpb24gMy43Mi4yLgoKCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBEb24ndCB3cml0ZSBnbG9iL01ha2VmaWxlLgoKCSogY29uZmlndXJlLmluIChBQ19DSEVDS19TWU1CT0wpOiBVc2UgQUNfREVGSU5FX1VOUVVPVEVELgoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3IgcmFubGliLgoKVHVlIE5vdiAyMiAyMjo0Mjo0MCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogT25seSBtYXJrIGFsc29fbWFrZSdzIGFzCgl1cGRhdGVkIGlmIHJlYWxseSByYW4gY21kcy4KClR1ZSBOb3YgMTUgMDY6MzI6NDYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogUHV0IGRubHMgYmVmb3JlIHJhbmRvbSB3aGl0ZXNwYWNlLgoKU3VuIE5vdiAxMyAwNTowMjoyNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKENQUEZMQUdTKTogTmV3IHZhcmlhYmxlLCBzZXQgZnJvbSBAQ1BQRkxBR1NALgoJKFJBTkxJQik6IFZhcmlhYmxlIHJlbW92ZWQuCgkocHJlZml4LCBleGVjX3ByZWZpeCk6IFNldCB0aGVzZSBmcm9tIEAuLi5ALgoJKC5jLm8pOiBVc2UgJChDUFBGTEFHUykuCgkoZ2xvYi9saWJnbG9iLmEpOiBEb24ndCBwYXNzIGRvd24gdmFyaWFibGVzIHRvIHN1Yi1tYWtlLgoJZ2xvYi9NYWtlZmlsZSBzaG91bGQgYmUgY29uZmlndXJlZCBwcm9wZXJseSBieSBjb25maWd1cmUuCgkoZGlzdGNsZWFuKTogUmVtb3ZlIGNvbmZpZy5sb2cgYW5kIGNvbmZpZy5jYWNoZSAoYXV0b2NvbmYgc3R1ZmYpLgoKTW9uIE5vdiAgNyAxMzo1ODowNiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogYWNjb25maWcuaDogQWRkICN1bmRlZiBIQVZFX1VOSU9OX1dBSVQuCgkqIGNvbmZpZ3VyZS5pbjogQ29udmVydGVkIHRvIEF1dG9jb25mIHYyLgoJKiBkaXIuYzogVGVzdCBIQVZFX0RJUkVOVF9ILCBIQVZFX1NZU19ESVJfSCwgSEFWRV9ORElSX0ggaW5zdGVhZAoJb2YgRElSRU5ULCBTWVNESVIsIE5ESVIuCgkqIGJ1aWxkLnNoLmluIChwcmVmaXgsIGV4ZWNfcHJlZml4KTogU2V0IHRoZXNlIGZyb20gQC4uLkAuCgkoQ1BQRkxBR1MpOiBOZXcgdmFyaWFibGUsIHNldCBmcm9tIEBDUFBGTEFHU0AuCgkoY29tcGlsaW5nIGxvb3ApOiBQYXNzICRDUFBGTEFHUyBiZWZvcmUgJENGTEFHUy4KCSogaW5zdGFsbC5zaDogRmlsZSByZW5hbWVkIHRvIGluc3RhbGwtc2guCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBXaGVuIG5vIGZsYWdzLCBzZXQgV09SRFMgdG8gemVyby4KClN1biBOb3YgIDYgMTg6MzQ6MDEgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi4xLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogVGVybWluYXRlIHByb3Blcmx5IHdoZW4gRkxBR1NUUklORyBpcwogICAgICAgIGVtcHR5LgoKRnJpIE5vdiAgNCAxNjowMjo1MSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLgoKVHVlIE5vdiAgMSAwMToxODoxMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcxLjUuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBXaGVuIEFSR1YgaXMgbmlsLCBvbmx5IHNldAoJdXBkYXRlX3N0YXRlIGFuZCBjYWxsIG5vdGljZV9maW5pc2hlZF9maWxlIGlmIGpvYl9uZXh0X2NvbW1hbmQKCXJldHVybnMgemVyby4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IENhbGwgbm90aWNlX2ZpbmlzaGVkX2ZpbGUgZm9yIGVtcHR5CiAgICAgICAgY29tbWFuZCBsaW5lLgoKVGh1IE9jdCAyNyAwMjowMjo0NSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5jIChzbmFwX2RlcHMpOiBTZXQgQ09NTUFORFNfU0lMRU5UIGZvciAuU0lMRU5ULCBub3QKICAgICAgICBDT01NQU5EU19OT0VSUk9SLgoKV2VkIE9jdCAyNiAwMjoxNDoxMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcxLjQuCgpUdWUgT2N0IDI1IDIyOjQ5OjI0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmaWxlLmMgKHNuYXBfZGVwcyk6IFNldCBjb21tYW5kX2ZsYWdzIGJpdHMgaW4gYWxsIDo6IGVudHJpZXMuCgpNb24gT2N0IDI0IDE4OjQ3OjUwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWtlLmggKHBvc2l4X3BlZGFudGljKTogRGVjbGFyZSBpdC4KCSogbWFpbi5jIChtYWluKTogTW92ZSBjaGVja3MgLklHTk9SRSwgLlNJTEVOVCwgLlBPU0lYIHRvCiAgICAgICAgc25hcF9kZXBzLgoJKiBmaWxlLmMgKHNuYXBfZGVwcyk6IENoZWNrIC5JR05PUkUsIC5TSUxFTlQsIC5QT1NJWCBoZXJlIGluc3RlYWQKCW9mIGluIG1haW4uICBJZiAuSUdOT1JFIGhhcyBkZXBzLCBPUiBDT01NQU5EU19OT0VSUk9SIGludG8gdGhlaXIKCWNvbW1hbmRfZmxhZ3MgYW5kIGRvbid0IHNldCAtaS4gIExpa2V3aXNlIC5TSUxFTlQuCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IEluIEZMQUdTIGluaXRpYWxpemF0aW9uLCBPUiBpbgoJQ0hJTEQtPmZpbGUtPmNvbW1hbmRfZmxhZ3MuCgkqIGZpbGUuaCAoc3RydWN0IGZpbGUpOiBOZXcgbWVtYmVyIGBjb21tYW5kX2ZsYWdzJy4KClN1biBPY3QgMTYgMDE6MDE6NTEgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBCdW1wIGZsYWcgdmFsdWVzIGZvciAtLW5vLXByaW50LWRpcmVjdG9yeSBhbmQKCS0td2Fybi11bmRlZmluZWQtdmFyaWFibGVzLCBzbyBuZWl0aGVyIGlzIDEgKHdoaWNoIGluZGljYXRlcyBhCglub25vcHRpb24gYXJndW1lbnQpLgoKU2F0IE9jdCAxNSAyMzozOTo0OCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogQWRkIG1pc3NpbmcgY29kZSBpbiAuSUdOT1JFIHRlc3QuCgpNb24gT2N0IDEwIDA0OjA5OjAzIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IERlZmluZSArRCBhbmQgK0YuCgpTYXQgT2N0ICAxIDA0OjA3OjQ4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBEZWZpbmUgaGlkZGVuIGF1dG9tYXRpYyB2YXJpYWJsZSB3aXRoIGNvbW1hbmQKCXZhcnMsIGFuZCBNQUtFT1ZFUlJJREVTIHRvIGEgcmVmZXJlbmNlIHRvIHRoYXQuCgkoZGVmaW5lX21ha2VmbGFncyk6IElmIHBvc2l4X3BlZGFudGljLCB3cml0ZSBhIHJlZmVyZW5jZSB0byB0aGF0CglpbnN0ZWFkLgoKVGh1IFNlcCAyOSAwMDoxNDoyNiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChwb3NpeF9wZWRhbnRpYyk6IE5ldyB2YXJpYWJsZS4KCShtYWluKTogU2V0IHBvc2l4X3BlZGFudGljIGlmIC5QT1NJWCBpcyBhIHRhcmdldC4KCUZpeCAuSUdOT1JFIGFuZCAuU0lMRU5UIGNoZWNrcyB0byByZXF1aXJlIGlzX3RhcmdldC4KCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IERlZmluZSBuZXcgYXV0b21hdGljIHZhcmlhYmxlCgkkKywgbGlrZSAkXiBidXQgYmVmb3JlIGNhbGxpbmcgdW5pcXVpemVfZGVwcy4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQ2FsbCBkZWxldGVfY2hpbGRfdGFyZ2V0cyBmb3Igbm9uLXNpZ25hbAoJZXJyb3IgaWYgLkRFTEVURV9PTl9FUlJPUiBpcyBhIHRhcmdldC4KClR1ZSBTZXAgMjcgMDE6NTc6MTQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS4zLgoKTW9uIFNlcCAyNiAxODoxNjo1NSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEb24ndCBjaGFuZ2UgQy0+ZmlsZS0+Y29tbWFuZF9zdGF0ZSB3aGVuCglkeWluZy4gIFRlc3QgaXQgb25seSBhZnRlciBjYWxsaW5nIHN0YXJ0X2pvYl9jb21tYW5kIGZvciBhIG5ldwoJY29tbWFuZCBsaW5lLiAgV2hlbiBubyBtb3JlIGNtZHMsIGp1c3Qgc2V0IEMtPmZpbGUtPnVwZGF0ZV9zdGF0dXMuCgkoc3RhcnRfam9iX2NvbW1hbmQpOiBXaGVuIHRoZSBsYXN0IGxpbmUgaXMgZW1wdHkgb3IgdW5kZXIgLW4sIHNldAoJQy0+ZmlsZS0+dXBkYXRlX3N0YXR1cy4KCShzdGFydF93YWl0aW5nX2pvYik6IEdyb2sgY3Nfbm90X3N0YXJ0ZWQgYWZ0ZXIgc3RhcnRfam9iX2NvbW1hbmQKCWFzIHN1Y2Nlc3MuCgkobmV3X2pvYik6IFNldCBDLT5maWxlLT51cGRhdGVfc3RhdHVzIHdoZW4gdGhlcmUgYXJlIG5vIGNtZHMuCgkoam9iX25leHRfY29tbWFuZCk6IFdoZW4gb3V0IG9mIGxpbmVzLCBkb24ndCBzZXQKCUNISUxELT5maWxlLT51cGRhdGVfc3RhdHVzIG9yIENISUxELT5maWxlLT5jb21tYW5kX3N0YXRlLgoKCSogbWFpbi5jIChxdW90ZV9hc193b3JkKTogUmVuYW1lZCBmcm9tIHNoZWxsX3F1b3RlLiAgVGFrZSBuZXcgYXJnOwoJaWYgbm9uemVybywgYWxzbyBkb3VibGUgJHMuCgkobWFpbik6IERlZmluZSBNQUtFT1ZFUlJJREVTIGZyb20gY29tbWFuZF92YXJpYWJsZXMgaGVyZS4KCShkZWZpbmVfbWFrZWZsYWdzKTogRG9uJ3QgdXNlIGNvbW1hbmRfdmFyaWFibGVzIGhlcmU7IGluc3RlYWQgd3JpdGUgYQoJcmVmZXJlbmNlICQoTUFLRU9WRVJSSURFUykgaW4gTUFLRUZMQUdTLiAgTWFrZSB2YXJzIHJlY3Vyc2l2ZS4KCgkqIGRpci5jIFtfX01TRE9TX19dOiBGaXhlZCB0eXBvLgoKCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFJlc2V0IEVYSVNUUyB3aGVuIHN0YXQgZmFpbHMuCgpTYXQgU2VwIDEwIDAzOjAxOjM1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYzogSW5jbHVkZSA8YXNzZXJ0Lmg+IGFuZCB1c2UgYXNzZXJ0IGluc3RlYWQgb2YgcHJpbnRmcwogICAgICAgIGFuZCBhYm9ydC4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogTG9vcCB1bnRpbCBvcHRpbmQgaGl0cyBBUkdDLCBub3QganVzdAoJdW50aWwgZ2V0b3B0X2xvbmcgcmV0dXJucyBFT0YuICBJbml0aWFsaXplIEMgdG8gemVybyBiZWZvcmUgbG9vcDsKCWluIGxvb3AgaWYgQyBpcyBFT0YsIHNldCBvcHRhcmcgZnJvbSBBUkdWW29wdGluZCsrXSwgZWxzZSBjYWxsCglnZXRvcHRfbG9uZy4KCShkZWNvZGVfZW52X3N3aXRjaGVzKTogVXNlIHZhcmlhYmxlX2V4cGFuZCBpbnN0ZWFkIG9mCglhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kLiAgQWxsb2NhdGUgYSBmcmVzaCBidWZmZXIgdG8gY29weSBzcGxpdAoJd29yZHMgaW50bzsgc2NhbiBjaGFyYWN0ZXJzIGJ5IGhhbmQgdG8gYnJlYWsgd29yZHMgYW5kCglkZWJhY2tzbGFzaGlmeS4KCShzaGVsbF9xdW90ZSk6IE5ldyBmdW5jdGlvbi4KCShkZWZpbmVfbWFrZWZsYWdzKTogQWxsb2NhdGUgZG91YmxlZCBzcGFjZSBmb3Igc3dpdGNoIGFyZ3MsIGFuZCBjb21tYW5kCgl2YXJpYWJsZSBuYW1lcyBhbmQgdmFsdWVzOyB1c2Ugc2hlbGxfcXVvdGUgdG8gcXVvdGUgdGhvc2UgdGhpbmdzLgoKRnJpIFNlcCAgOSAwMTozNzo0NyAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcxLjIuCgoJKiBhY2NvbmZpZy5oOiBBZGQgSEFWRV9TWVNfU0lHTElTVCBhbmQgSEFWRV9fU1lTX1NJR0xJU1QuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IFRoZSBub24tb3B0aW9uIHJldHVybiBmcm9tIGdldG9wdCBpcwoJMSwgbm90IDAuCgkoY29tbWFuZF92YXJpYWJsZXMpOiBOZXcgdHlwZSBhbmQgdmFyaWFibGUuCgkoZGVjb2RlX3N3aXRjaGVzLCBkZWNvZGVfZW52X3N3aXRjaGVzKTogQWZ0ZXIgbWFraW5nIGEgdmFyaWFibGUKCWRlZmluaXRpb24sIHJlY29yZCB0aGUgc3RydWN0IHZhcmlhYmxlIHBvaW50ZXIgaW4gdGhlCgljb21tYW5kX3ZhcmlhYmxlcyBjaGFpbi4KCShkZWZpbmVfbWFrZWZsYWdzKTogSWYgQUxMLCB3cml0ZSB2YXJpYWJsZSBkZWZpbml0aW9ucyBmb3IKCWNvbW1hbmRfdmFyaWFibGVzLgoKCSogbWFpbi5jIChvdGhlcl9hcmdzKTogVmFyaWFibGUgcmVtb3ZlZC4KCShnb2FscywgbGFzdGdvYWwpOiBOZXcgc3RhdGljIHZhcmlhYmxlcyAobW92ZWQgZnJvbSBhdXRvIGluIG1haW4pLgoJKG1haW4pOiBEb24ndCBwcm9jZXNzIE9USEVSX0FSR1MgYXQgYWxsLgoJRG9uJ3Qgc2V0IHZhcmlhYmxlIE1BS0VPVkVSUklERVMgYXQgYWxsOyBkZWZpbmUgTUFLRSB0byBqdXN0CiAgICAgICAgJChNQUtFX0NPTU1BTkQpLgoJKGluaXRfc3dpdGNoZXMpOiBQcmVwZW5kIGEgLSB7cmV0dXJuIGluIG9yZGVyfSBpbnN0ZWFkIG9mIGEgKwoJe3JlcXVpcmUgb3JkZXJ9LgoJKGRlY29kZV9zd2l0Y2hlcyk6IERvbid0IHNldCBPVEhFUl9BUkdTIGF0IGFsbC4KCUdyb2sgJ1wwJyByZXR1cm4gZnJvbSBnZXRvcHRfbG9uZyBhcyBub24tb3B0aW9uIGFyZ3VtZW50OyB0cnkKCXZhcmlhYmxlIGRlZmluaXRpb24gYW5kIChpZiAhRU5WKSBlbnRlciBnb2FsIHRhcmdldHMgaGVyZS4KCShkZWNvZGVfZW52X3N3aXRjaGVzKTogVXNlIGFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmQgdG8gc3RvcmUgdmFsdWUuCglVc2UgZmluZF9uZXh0X3Rva2VuIHRvIHNpbXBsaWZ5IHdvcmQtc3BsaXR0aW5nIGxvb3AuICBEb24ndAoJcHJlcGVuZCBhIGRhc2ggdG8gdW5pbnRlcnByZXRlZCB2YWx1ZS4gIEluc3RlYWQsIGlmIHNwbGl0IGludG8KCW9ubHkgb25lIHdvcmQsIHRyeSB2YXJpYWJsZSBkZWZpbml0aW9uIGFuZCBmYWlsaW5nIHRoYXQgcHJlcGVuZCBhCglkYXNoIHRvIHRoZSB3b3JkIGFuZCBwYXNzIGl0IHRvIGRlY29kZV9zd2l0Y2hlcyBhcyBhIHNpbmdsZSBhcmcuCgpXZWQgU2VwICA3IDAzOjAyOjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBPbmx5IHJlY2hlY2sgbW9kdGltZXMgaWYKCUZJTEUtPmNvbW1hbmRfc3RhdGUgd2FzIGNzX3J1bm5pbmcgb24gZW50cnkgKG1lYW5pbmcgdGhlIGNvbW1hbmRzCglhY3R1YWxseSBqdXN0IHJhbikuCgkodXBkYXRlX2ZpbGVfMSk6IFdoZW5ldmVyIHdlIHNldCBGSUxFLT51cGRhdGVfc3RhdHVzLCBjYWxsCglub3RpY2VfZmluaXNoZWRfZmlsZSBpbnN0ZWFkIG9mIGp1c3Qgc2V0X2NvbW1hbmRfc3RhdGUuCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFdoZW5ldmVyIHdlIHNldAoJQ0hJTEQtPmZpbGUtPnVwZGF0ZV9zdGF0dXMsIGNhbGwgbm90aWNlX2ZpbmlzaGVkX2ZpbGUgaW5zdGVhZCBvZgoJanVzdCBzZXRfY29tbWFuZF9zdGF0ZS4KClR1ZSBTZXAgIDYgMTk6MTM6NTQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHU+CgoJKiBkZWZhdWx0LmM6IEFkZCBtaXNzaW5nICIuCgoJKiBqb2IuYzogQ2hhbmdlZCBhbGwgYXNzaWdubWVudHMgb2YgY29tbWFuZF9zdGF0ZSBtZW1iZXJzIHRvIGNhbGxzCgl0byBzZXRfY29tbWFuZF9zdGF0ZS4KCSogcmVtYWtlLmM6IExpa2V3aXNlLgoJKiBmaWxlLmMgKHNldF9jb21tYW5kX3N0YXRlKTogTmV3IGZ1bmN0aW9uLgoJKiBmaWxlLmg6IERlY2xhcmUgc2V0X2NvbW1hbmRfc3RhdGUuCgoJKiBtYWluLmMgKGluaXRfc3dpdGNoZXMpOiBQdXQgYSArIGZpcnN0IGluIG9wdGlvbnMuCgpNb24gSnVsIDI1IDE4OjA3OjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJTWVyZ2UgTVNET1MvR08zMiBwb3J0IGZyb20gREogRGVsb3JpZSA8ZGpAY3Ryb24uY29tPi4KCSogdnBhdGguYzogQ2hhbmdlZCBhbGwgdXNlcyBvZiAnOicgdG8gUEFUSF9TRVBBUkFUT1JfQ0hBUi4KCSogbWFpbi5jIChkaXJlY3RvcnlfYmVmb3JlX2NoZGlyKTogTmV3IHZhcmlhYmxlLCBtb3ZlZCBvdXQgb2YgbWFpbgogICAgICAgICh3YXMgbG9jYWwpLgoJKG1haW4pIFtfX01TRE9TX19dOiBMb29rIGZvciBcIG9yIDogdG8gZGVsaW1pdCBsYXN0IGNvbXBvbmVudCBvZgoJUFJPR1JBTS4gIERvbid0IGZyb2IgQVJHVlswXSBiZWZvcmUgc2V0dGluZyBNQUtFX0NPTU1BTkQgdmFyaWFibGUuCgkoZGllKTogQ2hhbmdlIGJhY2sgdG8gYGRpcmVjdG9yeV9iZWZvcmVfY2hkaXInIGJlZm9yZSBkeWluZy4KCSogbWFrZS5oIChQQVRIX1NFUEFSQVRPUl9DSEFSKTogTmV3IG1hY3JvOyBkaWZmZXJpbmcgZGVmbnMgZm9yCiAgICAgICAgW19fTVNET1NfX10gYW5kIG5vdC4KCSogam9iLmMgW19fTVNET1NfX106IEluY2x1ZGUgPHByb2Nlc3MuaD4uCglbX19NU0RPU19fXSAoZG9zX3BpZCwgZG9zX3N0YXR1cywgZG9zX2JuYW1lLCBkb3NfYmVuYW1lLAoJZG9zX2JhdGNoX2ZpbGUpOiBOZXcgdmFyaWFibGVzLgoJKHJlYXBfY2hpbGRyZW4pIFtfX01TRE9TX19dOiBEb24ndCBjYWxsIHdhaXQ7IGp1c3QgZXhhbWluZSB0aG9zZSB2YXJzLgoJKHVuYmxvY2tfc2lncykgW19fTVNET1NfX106IERvIG5vdGhpbmcuCgkoc3RhcnRfam9iX2NvbW1hbmQpIFtfX01TRE9TX19dOiBVc2Ugc3Bhd252cGUgaW5zdGVhZCBvZiB2Zm9yayAmIGV4ZWMuCgkobG9hZF90b29faGlnaCkgW19fTVNET1NfX106IEFsd2F5cyByZXR1cm4gdHJ1ZS4KCShzZWFyY2hfcGF0aCkgW19fTVNET1NfX106IENoZWNrIGZvciA6IG9yIC8gaW4gRklMRSB0byBwdW50LgoJVXNlIFBBVEhfU0VQQVJBVE9SX0NIQVIgaW5zdGVhZCBvZiAnOicuCgkoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCkgW19fTVNET1NfX106IFdob2xseSBkaWZmZXJlbnQKCXZhbHVlcyBmb3Igc2hfY2hhcnMgYW5kIHNoX2NtZHMuICBXaG9sbHkgbmV3IGNvZGUgdG8gaGFuZGxlIHNoZWxsCglzY3JpcHRzLgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzaGVsbCcpIFtfX01TRE9TX19dOiBXaG9sbHkgbmV3CiAgICAgICAgaW1wbGVtZW50YXRpb24uCgkqIGRpci5jIFtfX01TRE9TX19dIChkb3NpZnkpOiBOZXcgZnVuY3Rpb24uCgkoZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3ApIFtfX01TRE9TX19dOiBDYWxsIGl0IG9uIEZJTEVOQU1FIGFuZAoJcHJvY2VzcyB0aGUgcmVzdWx0IGluc3RlYWQgb2YgRklMRU5BTUUgaXRzZWxmLgoJKGZpbGVfaW1wb3NzaWJsZV9wKSBbX19NU0RPU19fXTogTGlrZXdpc2UuCgkqIGRlZmF1bHQuYyBbX19NU0RPU19fXTogRGVmaW5lIEdDQ19JU19OQVRJVkUuCgkoZGVmYXVsdF9zdWZmaXhfcnVsZXMpIFtfX01TRE9TX19dOiBVc2UgYHlfdGFiLmMnIGluc3RlYWQgb2YgYHkudGFiLmMnLgoJKGRlZmF1bHRfdmFyaWFibGVzKSBbR0NDX0lTX05BVElWRV06IFNldCBDQyBhbmQgQ1hYIHRvIGBnY2MnLCBZQUNDIHRvCglgYmlzb24gLXknLCBhbmQgTEVYIHRvIGBmbGV4Jy4KCSogY29uZmlndXJlLmJhdCwgY29uZmlnaC5kb3M6IE5ldyBmaWxlcy4KCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSBbX19NU0RPU19fXTogSnVzdCByZW1vdmUKCWludGVybWVkaWF0ZXMgYW5kIGV4aXQuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBBZGQgcGFyZW5zIGluIGxlbmd0aAoJY29tcHV0YXRpb24gaW4gLlNVRkZJWEVTIGRlcCBsb29wIHRvIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmcuICBGcm9tCglKaW0gTWV5ZXJpbmcuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGcmVlIEZJTEVOQU1FIGlmIHdlIGFsbG9jYXRlZCBpdC4gIEZyb20KICAgICAgICBKaW0gTWV5ZXJpbmcuCgpNb24gSnVsICA0IDE3OjQ3OjA4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtaXNjLmMgKHNhZmVfc3RhdCk6IE5ldyBmdW5jdGlvbiwgRUlOVFItc2FmZSB3cmFwcGVyIGFyb3VuZCBzdGF0LgoJKiB2cGF0aC5jIChzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiByZWFkLmMgKGNvbnN0cnVjdF9pbmNsdWRlX3BhdGgpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkqIGpvYi5jIChzZWFyY2hfcGF0aCk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogZGlyLmMgKGZpbmRfZGlyZWN0b3J5KTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiBjb21tYW5kcy5jIChkZWxldGVfdGFyZ2V0KTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiBhcnNjYW4uYyAoYXJfbWVtYmVyX3RvdWNoKSBbRUlOVFJdOiBEbyBFSU5UUiBsb29waW5nIGFyb3VuZCBmc3RhdC4KCSogcmVtYWtlLmMgKG5hbWVfbXRpbWUpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkodG91Y2hfZmlsZSkgW0VJTlRSXTogRG8gRUlOVFIgbG9vcGluZyBhcm91bmQgZnN0YXQuCgpGcmkgSnVuIDI0IDA1OjQwOjI0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDaGVjayBmb3IgYSBzaGVsbCBjb21tYW5kIGZpcnN0LCBhbmQKCXRoZW4gc3RyaXAgbGVhZGluZyB0YWJzIGJlZm9yZSBmdXJ0aGVyIGNoZWNraW5nIGlmIGl0J3Mgbm90IGEKCXNoZWxsIGNvbW1hbmQgbGluZS4KCgkqIG1ha2UuaCBbX19hcm1dOiBVbmRlZmluZSBQT1NJWC4KCVshX19HTlVfTElCUkFSWV9fICYmICFQT1NJWCAmJiAhX1BPU0lYX1ZFUlNJT05dOiBEb24ndCBkZWNsYXJlIHN5c3RlbQoJZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGludC4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQWZ0ZXIgc3dhbGxvd2luZyBhCgliYWNrc2xhc2gtbmV3bGluZSBjb21iaW5hdGlvbiwgaWYgSU5TVFJJTkcgaXMgc2V0IGdvdG8gc3RyaW5nX2NoYXIKCShuZXcgbGFiZWwpIGZvciBub3JtYWwgSU5TVFJJTkcgaGFuZGxpbmcgY29kZS4KClNhdCBKdW4gIDQgMDE6MTE6MjAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IERvbid0IGNoZWNrIGZvciBzeXNfc2lnbGlzdCBhbmQgX3N5c19zaWdsaXN0IHdpdGgKCUFDX0hBVkVfRlVOQ1MuICBJbnN0ZWFkIHVzZSB0d28gQUNfQ09NUElMRV9DSEVDS3MuCgpNb24gTWF5IDIzIDE4OjIwOjM4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzEuMSByZWxlYXNlZC4KCgkqIG1ha2UuaCBbIV9fR05VX0xJQlJBUllfXyAmJiAhUE9TSVhdOiBBbHNvIHRlc3QgI2lmbmRlZgoJX1BPU0lYX1ZFUlNJT04gZm9yIHRoZXNlIGRlY2xhcmF0aW9ucy4KCgkqIG1pc2MuYyBbR0VUTE9BREFWR19QUklWSUxFR0VEXSBbUE9TSVhdOiBSZW1vdmUgYm9ndXMgI2lmbmRlZnMKCWFyb3VuZCAjdW5kZWZzIG9mIEhBVkVfU0VUUkVVSUQgYW5kIEhBVkVfU0VUUkVHSUQuCgpTYXQgTWF5IDIxIDE2OjI2OjM4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzEgcmVsZWFzZWQuCgoJKiBtaXNjLmMgW0dFVExPQURBVkdfUFJJVklMRUdFRF0gW1BPU0lYXTogRG9uJ3QgdGVzdCBbSEFWRV9TRVRVSURdCglhbmQgW0hBVkVfU0VUR0lEXS4gIEV2ZXJ5IHN5c3RlbSBoYXMgdGhvc2UsIGFuZCBjb25maWd1cmUgZG9lc24ndAoJY2hlY2sgZm9yIHRoZW0uCgoJKiBtYWtlLmggW19QT1NJWF9WRVJTSU9OXTogRG9uJ3QgI2RlZmluZSBQT1NJWCAjaWZkZWYgdWx0cml4LgoKCSogY29tcGF0TWFrZWZpbGUgKGxvYWRhdmcpOiBEZXBlbmQgb24gYW5kIHVzZSBsb2FkYXZnLmMgaW5zdGVhZCBvZgoJZ2V0bG9hZGF2Zy5jLgoJKGxvYWRhdmcuYyk6IExpbmsgb3IgY29weSBpdCBmcm9tIGdldGxvYWRhdmcuYy4KCShkaXN0Y2xlYW4pOiBSZW1vdmUgbG9hZGF2Zy5jLgoKTW9uIE1heSAxNiAyMjo1OTowNCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcwLjQuCgoJKiBtaXNjLmMgW0dFVExPQURBVkdfUFJJVklMRUdFRF0gWyEgUE9TSVhdOiBVbmRlZmluZSBIQVZFX1NFVEVVSUQKCWFuZCBIQVZFX1NFVEVHSUQuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBJbiBTQ0NTIHJ1bGVzLCBwdXQKCSQoU0NDU19PVVRQVVRfT1BUSU9OKSBiZWZvcmUgJDwuICBPbiBzb21lIHN5c3RlbXMgLUcgaXMgZ3Jva2tlZAoJb25seSBiZWZvcmUgdGhlIGZpbGUgbmFtZS4KCSogY29uZmlndXJlLmluIChTQ0NTX0dFVF9NSU5VU19HIGNoZWNrKTogUHV0IC1HIGZsYWcgYmVmb3JlIGZpbGUgbmFtZS4KClR1ZSBNYXkgMTAgMTY6Mjc6MzggMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogU3dhbGxvdwoJYmFja3NsYXNoLW5ld2xpbmUgY29tYmluYXRpb25zIGluc2lkZSAnJyBzdHJpbmdzIHRvby4KClRodSBNYXkgIDUgMDQ6MTU6MTAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogQ2FsbCBjb2xsYXBzZV9jb250aW51YXRpb25zIG9uIGVhY2ggbGluZQoJYmVmb3JlIGFsbCBlbHNlLgoKTW9uIEFwciAyNSAxOTozMjowMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBOb3RpY2UgbmV3bGluZSBpbnNpZGUKCScnIHN0cmluZyB3aGVuIFJFU1RQIGlzIG5vbi1udWxsLgoKRnJpIEFwciAyMiAxNzozMzozMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MC4zLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogUmVzZXQgRklMRSB0byBHLT5maWxlIGFmdGVyIHRoZQoJZG91YmxlLWNvbG9uIGxvb3Agc28gaXQgaXMgbmV2ZXIgbnVsbCBmb3IgZm9sbG93aW5nIGNvZGUuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGaXggYG92ZXJyaWRlIGRlZmluZScgcGFyc2luZyB0byBza2lwCgl3aGl0ZXNwYWNlIGFmdGVyIGBkZWZpbmUnIHByb3Blcmx5LgoKCSogY29tcGF0TWFrZWZpbGUgKHNyY2Rpcik6IERlZmluZSBhcyBAc3JjZGlyQDsgZG9uJ3QgcmVmZXJlbmNlCgkkKFZQQVRIKS4KCShnbG9iL01ha2VmaWxlKTogTmV3IHRhcmdldC4KClRodSBBcHIgMjEgMTY6MTY6NTUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAuMi4KCgkqIG1pc2MuYyAocmVtb3ZlX2NvbW1lbnRzKTogVXNlIGZpbmRfY2hhcl91bnF1b3RlLgoJKiBtYWtlLmggKGZpbmRfY2hhcl91bnF1b3RlKTogRGVjbGFyZSBpdC4KCSogcmVhZC5jIChmaW5kX2NoYXJfdW5xdW90ZSk6IE5ldyBmdW5jdGlvbiwgZ2VuZXJhbGl6ZWQgZnJvbQoJZmluZF9wZXJjZW50LgoJKGZpbmRfcGVyY2VudCwgZmluZF9zZW1pY29sb24sIHBhcnNlX2ZpbGVfc2VxKTogVXNlIHRoYXQuCgpXZWQgQXByIDIwIDE4OjQyOjM5IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEFsd2F5cyBhbGxvY2F0ZSBuZXcgc3RvcmFnZSBmb3IKCUZJTEUtPnN0ZW0uICBJdCBpcyBub3Qgc2FmZSB0byBzdG9yZSBTVEVNJ3MgYWRkcmVzcyBiZWNhdXNlIGl0CgltaWdodCBiZSBhdXRvIHN0b3JhZ2UuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzZXRldWlkIGFuZCBzZXRlZ2lkLgoJKiBtaXNjLmMgW0hBVkVfU0VURVVJRF06IERlY2xhcmUgc2V0ZXVpZC4KCVtIQVZFX1NFVEVHSURdOiBEZWNsYXJlIHNldGVnaWQuCgkobWFrZV9hY2Nlc3MsIHVzZXJfYWNjZXNzKSBbSEFWRV9TRVRFVUlEXTogVXNlIHNldGV1aWQuCglbSEFWRV9TRVRFR0lEXTogVXNlIHNldGVnaWQuCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBTZXQgU1RBVFVTIHRvIEZJTEUtPnVwZGF0ZV9zdGF0dXMsCgl0byBwcmVzZXJ2ZSB3aGV0aGVyIGl0J3MgMiBmb3IgZXJyb3Igb3IgMSBmb3IgLXEgdHJpZ2dlci4gIFdoZW4KCVNUQVRVUyBnZXRzIG5vbnplcm8gYW5kIC1xIGlzIHNldCwgYWx3YXlzIHN0b3AgaW1tZWRpYXRlbHkuCgkqIG1haW4uYyAobWFpbiwgZGVjb2RlX3N3aXRjaGVzKTogRGllIHdpdGggMiBmb3IgZXJyb3JzLgoJKG1haW4pOiBBY2NlcHQgMiByZXR1cm4gZnJvbSB1cGRhdGVfZ29hbF9jaGFpbiBhbmQgZGllIHdpdGggdGhhdC4KCSogbWlzYy5jIChmYXRhbCwgbWFrZWZpbGVfZmF0YWwpOiBEaWUgd2l0aCAyOyAxIGlzIHJlc2VydmVkIGZvciAtcQoJYW5zd2VyLgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IERpZSB3aXRoIDIgZm9yIGVycm9yLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogU2V0IHVwZGF0ZV9zdGF0dXMgdG8gMiBmb3IgZXJyb3IuICBTZXQgaXQgdG8KCTEgd2hlbiB3ZSB3b3VsZCBydW4gYSBjb21tYW5kIGFuZCBxdWVzdGlvbl9mbGFnIGlzIHNldC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IERvbid0IG1hcmsgbWFrZWZpbGVzIGFzIHByZWNpb3VzLiAgSnVzdAoJbGlrZSBvdGhlciB0YXJnZXRzLCB0aGV5IGNhbiBiZSBsZWZ0IGluY29uc2lzdGVudCBhbmQgaW4gbmVlZCBvZgoJcmVtYWtpbmcgYnkgYWJvcnRlZCBjb21tYW5kcy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFdyaXRlIG5vIGVycm9yIG1zZyBmb3IgLWluY2x1ZGUgZmlsZS4KClR1ZSBBcHIgIDUgMDU6MjI6MTkgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCk6IERvbid0IHVuYmxvY2sgc2lnbmFscy4KCgkqIGZpbGUuaCAoc3RydWN0IGZpbGUpOiBDaGFuZ2UgbWVtYmVyIGBkb3VibGVfY29sb24nIGZyb20gZmxhZyB0bwoJYHN0cnVjdCBmaWxlIConLgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IFNldCBkb3VibGVfY29sb24gcG9pbnRlciBpbnN0ZWFkIG9mIGZsYWcuCgkqIG1haW4uYyAobWFpbik6IFdoZW4gZGlzcXVhbGlmeWluZyBtYWtlZmlsZXMgZm9yIHVwZGF0aW5nLCB1c2UKCWRvdWJsZV9jb2xvbiBwb2ludGVyIHRvIGZpbmQgYWxsIGVudHJpZXMgZm9yIGEgZmlsZS4KCSogZmlsZS5jIChlbnRlcl9maWxlKTogSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGRvdWJsZS1jb2xvbiBlbnRyeQoJZm9yIHRoZSBmaWxlLCBzZXQgTkVXLT5kb3VibGVfY29sb24gdG8gdGhhdCBwb2ludGVyLgoJKGZpbGVfaGFzaF9lbnRlcik6IFVzZSBGSUxFLT5kb3VibGVfY29sb24gdG8gZmluZCBhbGwgZW50cmllcyB0bwoJc2V0IG5hbWUuCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IERvIGlubmVyIGxvb3Agb24gZG91YmxlLWNvbG9uIGVudHJpZXMuCgkodXBkYXRlX2ZpbGUpOiBVc2UgRklMRS0+ZG91YmxlX2NvbG9uIHBvaW50ZXIgdG8gZmluZCBhbGwgZW50cmllcy4KCShmX210aW1lKTogTGlrZXdpc2UuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBQcm9wYWdhdGUgbXRpbWUgY2hhbmdlIHRvIGFsbCBlbnRyaWVzLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBSZXR1cm4gYWZ0ZXIgYWJvcnQuCgpGcmkgQXByICAxIDE4OjQ0OjE1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoJKHBhcnNlX2ZpbGVfc2VxKTogV2hlbiByZW1vdmluZyBhbiBlbHQgdGhhdCBpcyBqdXN0IGApJywgcHJvcGVybHkKCWZpeCB1cCB0aGUgcHJldmlvdXMgZWx0J3MgbmV4dCBwb2ludGVyLgoKTW9uIE1hciAyOCAxODozMTo0OSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBtb2xlLmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBEbyBBQ19TRVRfTUFLRS4KCSogR05VbWFrZWZpbGUgKE1ha2VmaWxlLmluKTogRWRpdCBNQUtFIGFzc2lnbm1lbnQgaW50byBAU0VUX01BS0VALgoKRnJpIE1hciAgNCAwMDowMjozMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAoc3Vic3RfZXhwYW5kKTogSWYgQllfV09SRCBvciBTVUZGSVhfT05MWSBpcyBzZXQgYW5kCgl0aGUgc2VhcmNoIHN0cmluZyBpcyB0aGUgZW1wdHkgc3RyaW5nLCBmaW5kIGEgbWF0Y2ggYXQgdGhlIGVuZCBvZgoJZWFjaCB3b3JkICh1c2luZyBlbmRfb2ZfdG9rZW4gaW4gcGxhY2Ugb2Ygc2luZGV4KS4KCgkqIG1pc2MuYyAoZW5kX29mX3Rva2VuKTogRG9uJ3QgdHJlYXQgYmFja3NsYXNoZXMgc3BlY2lhbGx5OyB5b3UKCWNhbiBubyBsb25nZXIgZXNjYXBlIGJsYW5rcyB3aXRoIGJhY2tzbGFzaGVzIGluIGV4cG9ydCwgdW5leHBvcnQsCglhbmQgdnBhdGguICBUaGlzIHdhcyBuZXZlciBkb2N1bWVudGVkIGFueXdheS4KClRodSBNYXIgIDMgMjM6NTM6NDYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFZhcmlhYmxlIG5hbWUgZm9yIGBkZWZpbmUnIGlzIG5vdCBqdXN0CglmaXJzdCB0b2tlbjsgdXNlIHdob2xlIHJlc3Qgb2YgbGluZSBhbmQgc3RyaXAgdHJhaWxpbmcgYmxhbmtzLgoKV2VkIEZlYiAxNiAxNjowMzo0NSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcwLjEuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBZGQgLWQgbXNnIHN0YXRpbmcgYXJncy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFVzZSBpc3NwYWNlIHRvIHNraXAgb3ZlciBsZWFkaW5nCgl3aGl0ZXNwYWNlLCBhbmQgZXhwbGljaXRseSBhdm9pZCBza2lwcGluZyBvdmVyIHRhYnMuICBEb24ndCB3YW50Cgl0byBza2lwIGp1c3Qgc3BhY2VzIHRob3VnaDsgZm9ybWZlZWRzIGV0IGFsIHNob3VsZCBiZSBza2lwcGVkLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW19faHB1eF06IEFkZCBmIGluIEFSRkxBR1MuCgoJKiBhcnNjYW4uYyAoYXJfbmFtZV9lcXVhbCkgW19faHB1eF06IFN1YnRyYWN0IDIgaW5zdGVhZCBvZiAxIGZyb20KCXNpemVvZiBhcl9uYW1lIGZvciBtYXggbGVuZ3RoIHRvIGNvbXBhcmUuCgoJKiBtaXNjLmMgW0dFVExPQURBVkdfUFJJVklMRUdFRF0gW1BPU0lYXTogVW5kZWZpbmUgSEFWRV9TRVRSRVVJRAoJI2lmZGVmIEhBVkVfU0VUVUlEOyBsaWtld2lzZSBIQVZFX1NFVFJFR0lEIGFuZCBIQVZFX1NFVEdJRC4KCgkqIG1haW4uYyAobWFpbik6IENhbGwgdXNlcl9hY2Nlc3MgYWZ0ZXIgc2V0dGluZyBgcHJvZ3JhbScsIGluIGNhc2UKCWl0IG5lZWRzIHRvIHVzZSBpdCBpbiBhbiBlcnJvciBtZXNzYWdlLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWdub3JlIGFuIGVtcHR5IGxpbmUgc3RhcnRpbmcgd2l0aCBhIHRhYi4KClRodSBGZWIgMTAgMjE6NDU6MzEgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbiAoQUNfU1lTX1NJR0xJU1RfREVDTEFSRUQpOiBVc2UgdGhpcyBpbnN0ZWFkIG9mCglBQ19DT01QSUxFX0NIRUNLIHRoYXQgaXMgbm93IGl0cyBjb250ZW50cy4KCkZyaSBGZWIgIDQgMTY6Mjg6NTQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaDogI3VuZGVmIHN0cmVycm9yIGFmdGVyICNpbmNsdWRlIDxzdHJpbmcuaD4uCglbISBBTlNJX1NUUklOR106IERlY2xhcmUgc3RyZXJyb3IuCgpUaHUgRmViICAzIDAyOjIxOjIyIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtaXNjLmMgKHN0cmVycm9yKTogI3VuZGVmIGFueSBtYWNybyBiZWZvcmUgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCk1vbiBKYW4gMzEgMTk6MDc6MjMgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogQ2FsY3VsYXRlIEJFRyBiZWZvcmUgbG9vcAoJdG8gc3RyaXAgYmxhbmtzIGJ5IGRlY3JlbWVudGluZyBFTkQuICBEb24ndCBkZWNyIEVORCB0byBiZWZvcmUgQkVHLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogU2tpcCBvdmVyIGxlYWRpbmcgc3BhY2UgY2hhcmFjdGVycywgYnV0Cglub3QgdGFicywgYWZ0ZXIgcmVtb3ZpbmcgY29udGludWF0aW9ucyBhbmQgY29tbWVudHMgKGl0IHVzZWQgdG8KCXVzZSBpc3NwYWNlKS4KClR1ZSBKYW4gMjUgMTY6NDU6MDUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogSW4gJChARCkgZXQgYWwsIHVzZQoJcGF0c3Vic3QgdG8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoLgoKCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJZGVsZXRlX2NoaWxkX3RhcmdldHMuICBDaGVjayBmb3IgYXJjaGl2ZSBtZW1iZXJzIGFuZCBnaXZlIHNwZWNpYWwgbXNnLgoJKGRlbGV0ZV9jaGlsZF90YXJnZXRzKTogVXNlIGRlbGV0ZV90YXJnZXQuCgpNb24gSmFuIDE3IDE3OjAzOjIyIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfc3VmZml4X3J1bGVzKTogVXNlICQoVEVYSTJEVklfRkxBR1MpIGluCgl0ZXhpMmR2aSBydWxlcy4JVXNlICQoTUFLRUlORk9fRkxBR1MpIGluIG1ha2VpbmZvIHJ1bGVzLgoKVHVlIEphbiAxMSAxOToyOTo1NSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKHRhcmZpbGVzKTogT21pdCBtYWtlLWRvYy4KCShtYWtlLSQodmVyc2lvbikudGFyKTogSW5jbHVkZSBtYWtlLmluZm8qLgoKRnJpIEphbiAgNyAxNjoyNzowMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGNvbmZpZ3VyZSwgY29uZmlnLmguaW4pOiBDb21tZW50IG91dCBydWxlcy4KClRodSBKYW4gIDYgMTg6MDg6MDggMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChiaW5wcmVmaXgsIG1hbnByZWZpeCk6IE5ldyB2YXJpYWJsZXMuCgkoaW5zdG5hbWUpOiBWYXJpYWJsZSByZW1vdmVkLgoJKGluc3RhbGwpOiBVc2UgJCh7YmluLG1hbn1wcmVmaXgpbWFrZSBpbiBwbGFjZSBvZiAkKGluc3RuYW1lKS4KCUZpbGUgdGFyZ2V0cyBsaWtld2lzZWQgcmVuYW1lZC4KCk1vbiBKYW4gIDMgMTc6NTA6MjUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MCByZWxlYXNlZC4KClRodSBEZWMgMjMgMTQ6NDY6NTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OS4zLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IEluc2lkZSBtdWx0aS13b3JkIGFyY2hpdmUgcmVmCgl0cmFuc2xhdGlvbiBsb29wLCBjaGVjayBORVcxPT0wIGF0IGVuZCBhbmQgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgoKCSogR05VbWFrZWZpbGUgKG1ha2UtJCh2ZXJzaW9uKS50YXIpOiBEaXN0cmlidXRlIGluc3RhbGwuc2guCgkqIGluc3RhbGwuc2g6IE5ldyBmaWxlLgoKCSogY29uZmlndXJlLmluIChTQ0NTX0dFVF9NSU5VU19HIGNoZWNrKTogUHV0IHJlZGlyZWN0aW9uIGZvciBhZG1pbgoJY21kcyBvdXRzaWRlIHN1YnNoZWxsIHBhcmVucywgdG8gYXZvaWQgImNvbW1hbmQgbm90IGZvdW5kIiBtc2dzCglmcm9tIHRoZSBzaGVsbC4KCldlZCBEZWMgMjIgMTc6MDA6NDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFB1dCAtRyBmbGFnIGxhc3QgaW4gZ2V0IGNtZC4KCVJlZGlyZWN0IG91dHB1dCAmIGVycm9yIGZyb20gZ2V0IHRvIC9kZXYvbnVsbC4KCUZpeCByZXZlcnNlZCBzZW5zZSBvZiB0ZXN0LgoKRnJpIERlYyAxNyAxNTozMTozNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluIChTQ0NTX0dFVF9NSU5VU19HIGNoZWNrKTogVXNlIHBhcmVucyBpbnN0ZWFkIG9mCglicmFjZXMgaW5zaWRlIGlmIGNvbmRpdGlvbiBjb21tYW5kOyBzb21lIHNoZWxscyBsb3NlLgoKVGh1IERlYyAxNiAxNToxMDoyMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY5LjIuCgoJKiBhcnNjYW4uYyBbTV9VTklYXTogTW92ZSAjdW5kZWYgTV9YRU5JWCBmb3IgUE9SVEFSIHN0dWZmLgoJKFBPUlRBUikgW01fWEVOSVhdOiBEZWZpbmUgdG8gMCBpbnN0ZWFkIG9mIDEuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBPbmx5IGV4cG9ydCBNQUtFRkxBR1MgaWYgIUFMTC4KCldlZCBEZWMgMTUgMTc6NDc6NDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IENhc3QgcmVzdWx0IG9mIHBvaW50ZXIgYXJpdGggdG8gdW5zaWduZWQgaW50CgliZWZvcmUgcGFzc2luZyB0byBkZWZpbmVfdmFyaWFibGUgZm9yIGVudmFycy4gIE1hdHRlcnMgd2hlbgoJc2l6ZW9mKHVuc2lnbmVkKSE9c2l6ZW9mKHB0cmRpZmZfdCkuCgpUdWUgRGVjIDE0IDE0OjIxOjE2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IEFkZCBuZXcgY2hlY2sgZm9yIFNDQ1NfR0VUX01JTlVTX0cuCgkqIGNvbmZpZy5oLmluOiBBZGQgI3VuZGVmIFNDQ1NfR0VUX01JTlVTX0cuCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IFVzZSBgJChTQ0NTX09VVFBVVF9PUFRJT04pJyBpbgoJcGxhY2Ugb2YgYC1HICRAJyBpbiBTQ0NTIGNvbW1hbmRzLgoJKGRlZmF1bHRfdmFyaWFibGVzKSBbU0NDU19HRVRfTUlOVVNfR106IERlZmluZSBTQ0NTX09VVFBVVF9PUFRJT04KCXRvICItRyRAIi4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogUHV0IHRvdWNoIHN0YW1wLWNvbmZpZyBpbiBzZWNvbmQgYXJnCgkoc28gaXQgZ29lcyBpbiBjb25maWcuc3RhdHVzKSwgcmF0aGVyIHRoYW4gYWZ0ZXJ3YXJkLgoKCSogYXIuYyAoYXJfbWVtYmVyX2RhdGUpOiBEb24ndCBjYWxsIGVudGVyX2ZpbGUgb24gdGhlIGFyY2hpdmUgZmlsZQoJaWYgaXQgZG9lc24ndCBleGlzdCAoYnkgZmlsZV9leGlzdHNfcCkuCgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS9tYWtlLmluZm8pOiBSZXBsYWNlIGAkJGQvZm9vLmluZm8nCgl3aXRoIGAkJGRpci9tYWtlLmluZm8nIGluIGluc3RhbGwtaW5mbyBpbnZvY2F0aW9uIChvb3BzKS4KCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogT25seSBzZXQgTEFTVFBBVEggc2V0IFBBVEggd2hlbgoJd2UgZG8gbm90IHVubGluayBhbmQgZnJlZSBQQVRILgoKCSogZmlsZS5jIChwcmludF9maWxlX2RhdGFfYmFzZSk6IEZpeCBpbnZlcnRlZCBjYWxjdWxhdGlvbiBmb3IKCWF2ZXJhZ2UgZmlsZXMgcGVyIGhhc2ggYnVja2V0LgoKCSogcmVhZC5jIChyZWFkbGluZSk6IFdoZW4gd2Ugc2VlIGEgTlVMLCBnaXZlIG9ubHkgYSB3YXJuaW5nIGFuZAoJc3ludGhlc2l6ZSBhIG5ld2xpbmUgdG8gdGVybWluYXRlIHRoZSBidWlsZGluZyBsaW5lICh1c2VkIHRvCglmYXRhbCkuICBNb3ZlIGZnZXRzIGNhbGwgaW50byB0aGUgbG9vcCBjb25kaXRpb24sIGFuZCBhZnRlciB0aGUKCWxvb3AgdGVzdCBmZXJyb3IgKHVzZWQgdG8gdGVzdCAhZmVvZiBpbiB0aGUgbG9vcCkuCgpGcmkgRGVjICAzIDE2OjQwOjMxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzdHJlcnJvciBpbiBBQ19IQVZFX0ZVTkNTLgoKVGh1IERlYyAgMiAxNTozNzo1MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCURpZmZlcmVudGlhdGUgZGlmZmVyZW50IGZsYXZvcnMgb2YgbWlzc2luZyBtYWtlZmlsZSBlcnJvciBtc2dzLAoJcmVtb3ZpbmcgZ3JhdHVpdG91cyBgZm9wZW46ICcgYW5kIGdpdmluZyBjYWxsZXIgZm9yIGluY2x1ZGVkIG1ha2VmaWxlcy4KCSogbWlzYy5jIFshIEhBVkVfU1RSRVJST1JdOiBEZWZpbmUgb3VyIG93biBzdHJlcnJvciBoZXJlLgoJKHBlcnJvcl93aXRoX25hbWUsIHBmYXRhbF93aXRoX25hbWUpOiBVc2Ugc3RyZXJyb3IgaW5zdGVhZCBvZgoJcmVwbGljYXRpbmcgaXRzIGZ1bmN0aW9uYWxpdHkuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJldHVybiBpbnQgaW5zdGVhZCBvZiB2b2lkLgoJKHJlYWRfYWxsX21ha2VmaWxlcywgcmVhZF9tYWtlZmlsZSk6IENoYW5nZSBjYWxsZXJzIHRvIG5vdGljZSB6ZXJvCglyZXR1cm4gYW5kIGdpdmUgZXJyb3IgbXNnLgoKVGh1IE5vdiAxMSAxMTo0NzozNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY5LjEuCgoJKiBkZWZhdWx0LmM6IFB1dCBgLUcgJEAnIGJlZm9yZSAkPCBpbiBTQ0NTIGNtZHMuCgpXZWQgTm92IDEwIDA2OjA2OjE0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBZnRlciB0cnlpbmcgYSB2YXJpYWJsZSBkZWZuLCBub3RpY2UgaWYKCXRoZSBsaW5lIGJlZ2lucyB3aXRoIGEgdGFiLCBhbmQgZGlhZ25vc2UgYW4gZXJyb3IuCgpTdW4gTm92ICA3IDA4OjA3OjM3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjkuCgpXZWQgTm92ICAzIDA2OjU0OjMzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguMTAuCgoJKiBpbXBsaWNpdC5jICh0cnlfaW1wbGljaXRfcnVsZSk6IExvb2sgZm9yIGEgbm9ybWFsIHJ1bGUgYmVmb3JlIGFuCglhcmNoaXZlIHJ1bGUuCgpGcmkgT2N0IDI5IDE2OjQ1OjI4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzb3J0Jyk6IERvdWJsZSBOV09SRFMgd2hlbiBpdAoJb3ZlcmZsb3dzLCBpbnN0ZWFkIG9mIGFkZGluZyBmaXZlLgoKCSogY29tcGF0TWFrZWZpbGUgKGNsZWFuKTogUmVtb3ZlIGxvYWRhdmcuCgpXZWQgT2N0IDI3IDE3OjU4OjMzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguOS4KCgkqIGZpbGUuaCAoTkVXX01USU1FKTogRGVmaW5lIG5ldyBtYWNyby4KCSogbWFpbi5jIChtYWluKTogU2V0IHRpbWUgb2YgTkVXX0ZJTEVTIHRvIE5FV19NVElNRSwgbm90IHRvCgljdXJyZW50IHRpbWUgcmV0dXJuZWQgZnJvbSBzeXN0ZW0uICBSZW1vdmVkIHZhcmlhYmxlIE5PVy4KCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogVXNlIE5FV19NVElNRSBpbiBwbGFjZSBvZgoJY3VycmVudCB0aW1lIGhlcmUgdG9vLgoKVHVlIE9jdCAyNiAxOTo0NTozNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjguCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IERvbid0IGNsZWFyIE1VU1RfTUFLRSB3aGVuIEZJTEUgaGFzIG5vCgljbWRzIGFuZCAhREVQU19DSEFOR0VEIHVubGVzcyBhbHNvICFOT0VYSVNULgoKTW9uIE9jdCAyNSAxNToyNToyMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFdoZW4gY29udmVydGluZyBtdWx0aS13b3JkIGFyY2hpdmUKCXJlZnMsIGlnbm9yZSBhIHdvcmQgYmVnaW5uaW5nIHdpdGggYSAnKCcuCgpGcmkgT2N0IDIyIDAyOjUzOjM4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzeXMvdGltZWIuaC4KCSogbWFrZS5oIFtIQVZFX1NZU19USU1FQl9IXTogVGVzdCB0aGlzIGJlZm9yZSBpbmNsdWRpbmcgaXQuCgpUaHUgT2N0IDIxIDE2OjQ4OjE3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguNy4KCgkqIHJ1bGUuYyAoY29udmVydF9zdWZmaXhfcnVsZSk6IE5ldyBsb2NhbCBUQVJHUEVSQ0VOVC4gIFNldCBpdCB0bwoJVEFSR05BTUUrMSBmb3IgIiglLm8pIiwgdG8gVEFSR05BTUUgZm9yICIlLj8iLiAgVXNlIGl0IGluIHBsYWNlIG9mCglUQVJHTkFNRSB0byBpbml0aWFsaXplIFBFUkNFTlRTWzBdLgoKTW9uIE9jdCAxOCAwNjo0OTozNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBVc2UgQUNfSEFWRV9IRUFERVJTKHVuaXN0ZC5oKSBpbnN0ZWFkIG9mIEFDX1VOSVNURF9ILgoJUmVtb3ZlIEFDX1VTRzsgaXQgaXMgbm8gbG9uZ2VyIHVzZWQuCgoJKiBmaWxlLmMgKHByaW50X2ZpbGUpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCXByaW50X2ZpbGVfZGF0YV9iYXNlLgoJKHByaW50X2ZpbGVfZGF0YV9iYXNlKTogQ2FsbCBpdC4KCSogcnVsZS5jIChwcmludF9ydWxlKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglwcmludF9ydWxlX2RhdGFfYmFzZS4KCShwcmludF9ydWxlX2RhdGFfYmFzZSk6IENhbGwgaXQuCgpUaHUgT2N0IDE0IDE0OjU0OjAzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGluc3RhbGxfZGVmYXVsdF9zdWZmaXhfcnVsZXMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbgoJb3V0IG9mIGluc3RhbGxfZGVmYXVsdF9pbXBsaWNpdF9ydWxlcy4KCShpbnN0YWxsX2RlZmF1bHRfaW1wbGljaXRfcnVsZXMpOiBNb3ZlIHN1ZmZpeCBydWxlIGNvZGUgdGhlcmUuCgkqIG1ha2UuaDogRGVjbGFyZSBpbnN0YWxsX2RlZmF1bHRfc3VmZml4X3J1bGVzLgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIGluc3RhbGxfZGVmYXVsdF9zdWZmaXhfcnVsZXMgYmVmb3JlIHJlYWRpbmcKCW1ha2VmaWxlcy4gIE1vdmUgY29udmVydF90b19wYXR0ZXJuIGNhbGwgYmVmb3JlCglpbnN0YWxsX2RlZmF1bHRfaW1wbGljaXRfcnVsZXMuCgoJKiBqb2IuaCAoc3RydWN0IGNoaWxkKTogTWFrZSBgcGlkJyBtZW1iZXIgdHlwZSBgcGlkX3QnIGluc3RlYWQgb2YKCWBpbnQnLgoKCSogY29tcGF0TWFrZWZpbGUgKFJBTkxJQik6IE5ldyB2YXJpYWJsZSwgc2V0IGJ5IGNvbmZpZ3VyZS4KCShnbG9iL2xpYmdsb2IuYSk6IFBhc3MgUkFOTElCIHZhbHVlIGRvd24gdG8gc3VibWFrZS4KCglGaXhlcyBmb3IgU0NPIDMuMiAiZGV2c3lzIDQuMiIgZnJvbSBwc3NAdGZuLmNvbSAoUGV0ZXIgU2Fsdml0dGkpLgoJKiBtYWtlLmg6IEluY2x1ZGUgPHN5cy90aW1lYi5oPiBiZWZvcmUgPHRpbWUuaD4gZm9yIFNDTyBsb3NzYWdlLgoJKiBqb2IuYyBbISBnZXRkdGFibGVzaXplXSBbISBIQVZFX0dFVERUQUJMRVNJWkVdOiBJZiBOT0ZJTEUgaXMgbm90CglkZWZpbmVkIGJ1dCBOT0ZJTEVTX01BWCBpcywgZGVmaW5lIGl0IHRvIGJlIHRoYXQuCgpNb24gT2N0IDExIDE5OjQ3OjMzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAobWFrZS0kKHZlcnNpb24pLnRhcik6IERlcGVuZCBvbiBhY2NvbmZpZy5oLCBzbyBpdAoJaXMgZGlzdHJpYnV0ZWQuCgpTdW4gT2N0ICAzIDE1OjE1OjMzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBBZGQgYC1HICRAJyB0byBTQ0NTIGdldCBjbWRzLgoKVHVlIFNlcCAyOCAxNDoxODoyMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBBZGQgXiB0byBTSF9DSEFSUzsgaXQKCWlzIGFub3RoZXIgc3ltYm9sIGZvciB8IGluIHNvbWUgc2hlbGxzLgoJKiBtYWluLmMgKG1haW4pOiBBZGQgaXQgdG8gQ01EX0RFRlMgcXVvdGluZyBsaXN0IGFzIHdlbGwuCgpNb24gU2VwIDIwIDE4OjA1OjI0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFJlbW92ZSAnPScgZnJvbQoJU0hfQ0hBUlMuICBPbmx5IHB1bnQgb24gJz0nIGlmIGl0IGlzIHVucXVvdGVkIGluIGEgd29yZCBiZWZvcmUgdGhlCglmaXJzdCB3b3JkIHdpdGhvdXQgYW4gdW5xdW90ZWQgJz0nLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogU2V0IHZfZXhwb3J0IGZvciBNQUtFRkxBR1MuCgpGcmkgU2VwIDE3IDAwOjM3OjE4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IFVzZSAuREVGQVVMVCBjbWRzIGZvciBwaG9ueSB0YXJnZXRzLgoKCSogbWFrZS5oIFtfQUlYICYmIF9QT1NJWF9TT1VSQ0VdOiBEZWZpbmUgUE9TSVguCgoJKiBjb21tYW5kcy5jIChkZWxldGVfY2hpbGRfdGFyZ2V0cyk6IERvbid0IGRlbGV0ZSBwaG9ueSBmaWxlcy4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFNldCBDT01NQU5EU19SRUNVUlNFIGluIEZMQUdTIGlmIHdlCglzZWUgYSBgKycgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tbWFuZCBsaW5lLgoKVGh1IFNlcCAgOSAxNzo1NzoxNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjYuCgpXZWQgU2VwICA4IDIwOjE0OjIxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBEZWZpbmUgTUFLRUZMQUdTIHdpdGggb19maWxlLCBub3Qgb19lbnYuCgpNb24gQXVnIDMwIDEyOjMxOjU4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kKTogRmF0YWwgb24gYW4gdW50ZXJtaW5hdGVkIHJlZmVyZW5jZS4KClRodSBBdWcgMTkgMTY6Mjc6NTMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC41LgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBEZWZpbmUgbmV3IG9fZGVmYXVsdAoJdmFyaWFibGUgYE1BS0VfVkVSU0lPTicgZnJvbSB2ZXJzaW9uX3N0cmluZyBhbmQgcmVtb3RlX2Rlc2NyaXB0aW9uLgoKCSogbWFrZS5oICh2ZXJzaW9uX3N0cmluZywgcmVtb3RlX2Rlc2NyaXB0aW9uKTogRGVjbGFyZSB0aGVzZSBoZXJlLgoJKiBtYWluLmM6IERvbid0IGRlY2xhcmUgdmVyc2lvbl9zdHJpbmcuCgkocHJpbnRfdmVyc2lvbik6IERvbid0IGRlY2xhcmUgcmVtb3RlX2Rlc2NyaXB0aW9uLgoKV2VkIEF1ZyAxOCAxNTowMToyNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRnJlZSBzcGFjZSBwb2ludGVkIHRvIGJ5IENPTkRJVElPTkFMUwoJYmVmb3JlIHJlc3RvcmluZyB0aGUgb2xkIHBvaW50ZXIuCgpNb24gQXVnIDE2IDE3OjMzOjM2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoJChvYmpzKSk6IERlcGVuZCBvbiBjb25maWcuaC4KCgkqIEdOVW1ha2VmaWxlIChidWlsZC5zaC5pbik6IERlcGVuZCBvbiBjb21wYXRNYWtlZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbjogVG91Y2ggc3RhbXAtY29uZmlnIGFmdGVyIEFDX09VVFBVVC4KCkZyaSBBdWcgMTMgMTY6MDQ6MjIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC40LgoKVGh1IEF1ZyAxMiAxNzoxODo1NyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oOiBJbmNsdWRlIDxjb25maWcuaD4gaW5zdGVhZCBvZiAiY29uZmlnLmgiLgoKV2VkIEF1ZyAxMSAwMjozNToyNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogTWFrZSBhbGwgdmFyaWFibGVzIGludGVybmVkIGZyb20gRU5WUCBiZSB2X2V4cG9ydC4KCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBJbiB2X2RlZmF1bHQgY2FzZSwgZG9uJ3QKCWNoZWNrIGZvciBhbiBvX2ZpbGUgdmFyaWFibGUgdGhhdCBgZ2V0ZW52JyBmaW5kcy4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogTmV3IGxvY2FsIHZhcmlhYmxlIEFOWV9MT0NBTDsgc2V0IGl0Cgl3aGlsZSBzZXR0aW5nIEFOWV9SRU1PVEUuICBJZiAhQU5ZX0xPQ0FMLCBkb24ndCB3YWl0IGZvciBsb2NhbCBraWRzLgoKCSogbWFpbi5jIChtYWluKTogRG9uJ3QgY2FsbCBkZWNvZGVfZW52X3N3aXRjaGVzIG9uIE1GTEFHUy4gIERPQyBUSElTLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKTogI2lmIDAgb3V0IGZyZWVpbmcgb2YgRU5WUCBzaW5jZSBpdAoJaXMgZW52aXJvbi4KCk1vbiBBdWcgIDkgMTc6Mzc6MjAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC4zLgoKCSogcmVtb3RlLXN0dWIuYyAocmVtb3RlX3N0YXR1cyk6IFNldCBlcnJubyB0byBFQ0hJTEQgYmVmb3JlIHJldHVybi4KCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBTY2FuIHRoZSBjaGFpbiBmb3IgcmVtb3RlIGNoaWxkcmVuIGFuZAoJbmV2ZXIgY2FsbCByZW1vdGVfc3RhdHVzIGlmIHRoZXJlIGFyZSBub25lLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKTogI2lmIDAgb3V0IGNhbGxpbmcKCXRhcmdldF9lbnZpcm9ubWVudDsganVzdCBzZXQgRU5WUCB0byBlbnZpcm9uIGluc3RlYWQuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IENoZWNrIGZvciBuZWdhdGl2ZSByZXR1cm4gZnJvbQoJcmVtb3RlX3N0YXR1cyBhbmQgZmF0YWwgZm9yIGl0LgoJV2hlbiBibG9ja2luZyBsb2NhbCBjaGlsZCB3YWl0IHJldHVybnMgMCwgdGhlbiB0cnkgYSBibG9ja2luZyBjYWxsCgl0byByZW1vdGVfc3RhdHVzLgoKVHVlIEF1ZyAgMyAwMDoxOTowMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGNsZWFuKTogRGVsZXRlIG1ha2UuaW5mbyogYW5kIG1ha2UuZHZpIGhlcmUuCgkoZGlzdGNsZWFuKTogTm90IGhlcmUuCgoJKiBkZXAuaCAoUk1fKik6IFVzZSAjZGVmaW5lcyBpbnN0ZWFkIG9mIGVudW0gdG8gYXZvaWQgbG9zc2FnZSBmcm9tCgljb21waWxlcnMgdGhhdCBkb24ndCBsaWtlIGVudW0gdmFsdWVzIHVzZWQgYXMgaW50cy4KCk1vbiBBdWcgIDIgMTY6NDY6MzQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChsb2FkYXZnKTogQWRkICQoTE9BRExJQkVTKS4KClN1biBBdWcgIDEgMTY6MDE6MTUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC4yLgoKCSogY29tcGF0TWFrZWZpbGUgKGxvYWRhdmcsIGNoZWNrLWxvYWRhdmcpOiBOZXcgdGFyZ2V0cy4KCShjaGVjayk6IERlcGVuZCBvbiBjaGVjay1sb2FkYXZnLgoKCSogY29tcGF0TWFrZWZpbGUgKGdsb2IvbGliZ2xvYi5hKTogRGVwZW5kIG9uIGNvbmZpZy5oLgoKCSogbWlzYy5jIChsb2dfYWNjZXNzKTogV3JpdGUgdG8gc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0LgoKRnJpIEp1bCAzMCAwMDowNzowMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjEuCgpUaHUgSnVsIDI5IDIzOjI2OjQwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW4gKFNZU19TSUdMSVNUX0RFQ0xBUkVEKTogSW4gdGVzdCBwcm9ncmFtIGluY2x1ZGUKCTx1bmlzdGQuaD4gI2lmZGVmIEhBVkVfVU5JU1REX0guCgoJKiBjb21wYXRNYWtlZmlsZSAoLlBIT05ZKTogUHV0IGFmdGVyIGBhbGwnIGV0IGFsLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfSVJJWF9TVU4uCgpXZWQgSnVsIDI4IDE3OjQxOjEyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguCgpNb24gSnVsIDI2IDE0OjM2OjQ5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuOC4KClN1biBKdWwgMjUgMjI6MDk6MDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny43LgoKCSogY29tcGF0TWFrZWZpbGUgKCQoaW5mb2RpcikvbWFrZS5pbmZvKTogRG9uJ3QgdXNlICQoaW5zdG5hbWUpLgoJUnVuIGluc3RhbGwtaW5mbyBzY3JpcHQgaWYgcHJlc2VudC4KCkZyaSBKdWwgMjMgMTY6MDM6NTAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbU1RBVF9NQUNST1NfQlJPS0VOXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgW3V0c10uCgoJKiBjb25maWd1cmUuaW46IEFkZCBBQ19TVEFUX01BQ1JPU19CUk9LRU4uCgpXZWQgSnVsIDE0IDE4OjQ4OjExIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuNi4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJlY29nbml6ZSBkaXJlY3RpdmUgYC1pbmNsdWRlJywgbGlrZQoJYGluY2x1ZGUnIGJ1dCBzZXRzIFJNX0RPTlRDQVJFIGZsYWcuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBJZiBGSUxFIGlzIG5pbCwgdXNlCgljdXJyZW50X3ZhcmlhYmxlX3NldF9saXN0IGluIHBsYWNlIG9mIEZJTEUtPnZhcmlhYmxlcy4KCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKTogR2V0IGFuIGVudmlyb25tZW50IGZvcgoJdGhlIGNoaWxkIGZyb20gdGFyZ2V0X2Vudmlyb25tZW50IGluc3RlYWQgb2YgdXNpbmcgZW52aXJvbi4KCgkqIGRlcC5oOiBEZWNsYXJlIHJlYWRfYWxsX21ha2VmaWxlcyBoZXJlLgoJKFJNXyopOiBEZWZpbmUgbmV3IGVudW0gY29uc3RhbnRzLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBTZWNvbmQgYXJnIGlzIEZMQUdTIGluc3RlYWQgb2YgVFlQRS4KCVRyZWF0IGl0IGFzIGEgYml0IG1hc2sgY29udGFpbmluZyBSTV8qLgoJKHJlYWRfYWxsX21ha2VmaWxlcyk6IEZvciBkZWZhdWx0IG1ha2VmaWxlcywgc2V0IEQtPmNoYW5nZWQgdG8KCVJNX0RPTlRDQVJFIGluc3RlYWQgb2YgMS4KCSogbWFpbi5jOiBEb24ndCBkZWNsYXJlIHJlYWRfYWxsX21ha2VmaWxlcyBoZXJlLgoJKG1haW4pOiBDaGVjayBgY2hhbmdlZCcgbWVtYmVyIG9mIHJlYWRfbWFrZWZpbGVzIGVsdHMgZm9yIFJNXyoKCWZsYWdzIGluc3RlYWQgb2Ygc3BlY2lmaWMgaW50ZWdlciB2YWx1ZXMuCgpNb24gSnVsIDEyIDIyOjQyOjE3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW3NlcXVlbnQgJiYgaTM4Nl06ICN1bmRlZiBQT1NJWC4gIEZyb20gdHJvc3RAY3NlLm9naS5lZHUuCgpUaHUgSnVsICA4IDE5OjUxOjIzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IElmIEVMRU0gaXMgemVybyAwLCBmcmVlIFBBVFRFUk4KCWFzIHdlbGwgYXMgVlBBVEguCgkoYnVpbGRfdnBhdGhfbGlzdHMpOiBFbXB0eSBgdnBhdGhzJyBhcm91bmQgY29uc3RydWN0X3ZwYXRoX2xpc3QKCWNhbGwgZm9yICQoVlBBVEgpLiAgRXhwYW5kICQoc3RyaXAgJChWUEFUSCkpLCBub3QganVzdCAkKFZQQVRIKS4KCgkqIHJ1bGUuYyAoY29udmVydF9zdWZmaXhfcnVsZSk6IFVzZSBhbGxvY2EgaW5zdGVhZCBvZiB4bWFsbG9jIGZvcgoJUEVSQ0VOVFMsIHdob3NlIHN0b3JhZ2UgaXMgbm90IGNvbnN1bWVkIGJ5IGNyZWF0ZV9wYXR0ZXJuX3J1bGUuCgoJKiBtYWtlLmggW19fbWlwcyAmJiBfU1lTVFlQRV9TVlIzXTogI3VuZGVmIFBPU0lYLgoKV2VkIEp1biAzMCAxODoxMTo0MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjUuCgoJKiBydWxlLmMgKG1heF9wYXR0ZXJuX3RhcmdldHMpOiBOZXcgdmFyaWFibGUuCgkoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBDb21wdXRlIGl0cyB2YWx1ZS4KCSogcnVsZS5oOiBEZWNsYXJlIGl0LgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IE1ha2UgVFJZUlVMRVMgbWF4X3RhcmdldF9wYXR0ZXJucwoJdGltZXMgYmlnZ2VyLiAgTW92ZSBhZGRpbmcgbmV3IFRSWVJVTEVTIGVsdCBpbnNpZGUgdGhlIGlubmVyCgl0YXJnZXRzIGxvb3AsIHNvIGVhY2ggbWF0Y2hpbmcgdGFyZ2V0IGdldHMgaXRzIG93biBlbHQgaW4gTUFUQ0hFUwoJYW5kIENIRUNLRURfTEFTVFNMQVNILgoKCSogZmlsZS5jIChyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IElmIFNJRyE9MCBzYXkgYGludGVybWVkaWF0ZSBmaWxlJwoJaW5zdGVhZCBvZiBqdXN0IGBmaWxlJyBpbiBlcnJvciBtc2cuCgpGcmkgSnVuIDI1IDE0OjU1OjE1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndik6IFR1cm4gb2ZmCgktLXdhcm4tdW5kZWZpbmVkLXZhcmlhYmxlcyBhcm91bmQgZXhwYW5zaW9uIG9mIFNIRUxMIGFuZCBJRlMuCgkqIHJlYWQuYyAodGlsZGVfZXhwYW5kKTogTGlrZXdpc2UgZm9yIEhPTUUuCgkocmVhZF9hbGxfbWFrZWZpbGVzKTogTGlrZXdpc2UgZm9yIE1BS0VGSUxFUy4KCSogdnBhdGguYyAoYnVpbGRfdnBhdGhfbGlzdHMpOiBMaWtld2lzZSBmb3IgVlBBVEguCgoJKiBtYWluLmMgKHdhcm5fdW5kZWZpbmVkX3ZhcmlhYmxlc19mbGFnKTogTmV3IGZsYWcgdmFyaWFibGUuCgkoc3dpdGNoZXMpOiBBZGQgLS13YXJuLXVuZGVmaW5lZC12YXJpYWJsZXMuCgkqIG1ha2UuaCAod2Fybl91bmRlZmluZWRfdmFyaWFibGVzX2ZsYWcpOiBEZWNsYXJlIGl0LgoJKiBleHBhbmQuYyAod2Fybl91bmRlZmluZWQpOiBOZXcgZnVuY3Rpb24uCgkocmVmZXJlbmNlX3ZhcmlhYmxlKTogQ2FsbCBpdCBpZiB0aGUgdmFyaWFibGUgaXMgdW5kZWZpbmVkLgoJKHZhcmlhYmxlX2V4cGFuZCk6IEluIHN1YnN0aXR1dGlvbiByZWYsIGNhbGwgd2Fybl91bmRlZmluZWQgaWYgdGhlCgl2YXJpYWJsZSBpcyB1bmRlZmluZWQuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfcGF0dGVybl9ydWxlcyk6IEFkZCBgJS5jOiAlLncgJS5jaCcgYW5kCglgJS50ZXg6ICUudyAlLmNoJyBydWxlcy4KCShkZWZhdWx0X3N1ZmZpeF9ydWxlczogLncuYywgLncudGV4KTogUGFzcyB0aHJlZSBhcmdzOiAkPCAtICRALgoJKGRlZmF1bHRfc3VmZml4ZXMpOiBBZGQgYC5jaCcuCgpNb24gSnVuIDIxIDE3OjU1OjM5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfc3VmZml4ZXMpOiBSZXBsYWNlIGAuY3dlYicgd2l0aCBgLncnLgoJKGRlZmF1bHRfc3VmZml4X3J1bGVzKTogUmVuYW1lIGAuY3dlYi5jJyBhbmQgYC5jd2ViLnRleCcgdG8gYC53LmMnCglhbmQgYC53LnRleCcuCgpGcmkgSnVuIDExIDE0OjQyOjA5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoJChiaW5kaXIpLyQoaW5zdG5hbWUpKTogQWRkIG1pc3NpbmcgYmFja3NsYXNoLgoKVGh1IEp1biAxMCAxODoxNDowOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjQuCgoJKiByZWFkLmMgKG11bHRpX2dsb2IpOiBEb24ndCBmcmVlIE9MRCBhbmQgT0xELT5uYW1lIGluIHRoZQoJRk9VTkQhPTAgZm9yay4gIFVzZSBuZXcgYmxvY2stbG9jYWwgdmFyaWFibGUgRiBpbnN0ZWFkIG9mCgljbG9iYmVyaW5nIE9MRC4KCgkqIGFyLmMgKGdsb2JfcGF0dGVybl9wKTogTmV3IGZ1bmN0aW9uLCBzbmFyZmVkIGZyb20gZ2xvYi9nbG9iLmMuCgkoYXJfZ2xvYik6IENhbGwgaXQ7IHJldHVybiBuaWwgaW1tZWRpYXRlbHkgaWYgTUVNQkVSX1BBVFRFUk4KCWNvbnRhaW5zIG5vIG1ldGFjaGFyYWN0ZXJzLgoKV2VkIEp1biAgOSAxNjoyNTozNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXIuYyAoYXJfZ2xvYntfbWF0Y2gsX2FscGhhY29tcGFyZX0pOiBOZXcgZnVuY3Rpb24uCgoJKiBkZXAuaCBbISBOT19BUkNISVZFU106IERlY2xhcmUgaXQuCgkqIHJlYWQuYyAobXVsdGlfZ2xvYikgWyEgTk9fQVJDSElWRVNdOiBVc2UgaXQgb24gYXJjaGl2ZSBtZW1iZXIgZWx0cy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFBhc3MgZmxhZyAoMSkgdG8gcGFyc2VfZmlsZV9zZXEsIG5vdCB0bwoJbXVsdGlfZ2xvYiAod2hpY2ggZG9lc24ndCB0YWtlIGEgM3JkIGFyZykuCgkqIHJ1bGUuYyAoaW5zdGFsbF9wYXR0ZXJuX3J1bGUpOiBMaWtld2lzZS4KCSogZGVmYXVsdC5jIChzZXRfZGVmYXVsdF9zdWZmaXhlcyk6IEhlcmUgdG9vLgoJKiBmdW5jdGlvbi5jIChzdHJpbmdfZ2xvYik6IERvbid0IHBhc3MgZ3JhdHVpdG91cyBhcmcgdG8gbXVsdGlfZ2xvYi4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpIFshIE5PX0FSQ0hJVkVTXTogQWRkIHBvc3QtcHJvY2Vzc2luZwoJbG9vcCB0byB0cmFuc2xhdGUgYXJjaGl2ZSByZWZzICJsaWIoYSBiKSIgaW50byAibGliKGEpIGxpYihiKSIuCgpNb24gSnVuICA3IDE5OjI2OjUxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoaW5zdGFsbGRpcnMpOiBBY3R1YWxseSBwYXNzIGRpcmVjdG9yeSBuYW1lcy4KCSgkKGJpbmRpcikvJChpbnN0bmFtZSkpOiBUZXN0IGNoZ3JwJiZjaG1vZCBleGl0IHN0YXR1cyB3aXRoIGBpZic7CglpZiBpdCBmYWlscywgZWNobyBhIHdhcm5pbmcgbXNnLCBidXQgZG9uJ3QgbWFrZSB0aGUgcnVsZSBmYWlsLgoKCSogcmVhZC5jICh0aWxkZV9leHBhbmQpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgdGlsZGVfZXhwYW5kLgoJKG11bHRpX2dsb2IpOiBDYWxsIGl0LgoJKGNvbnN0cnVjdF9pbmNsdWRlX3BhdGgpOiBFeHBhbmQgfiBpbiBkaXJlY3RvcnkgbmFtZXMuCgkqIGRlcC5oOiBEZWNsYXJlIHRpbGRlX2V4cGFuZC4KCSogbWFpbi5jIChlbnRlcl9jb21tYW5kX2xpbmVfZmlsZSk6IEV4cGFuZCB+IGF0IHRoZSBzdGFydCBvZiBOQU1FLgoJKG1haW4pOiBFeHBhbmQgfiBpbiAtQyBhcmdzLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBFeHBhbmQgfiBpbiBGSUxFTkFNRSB1bmxlc3MgVFlQRT09Mi4KCkZyaSBKdW4gIDQgMTM6MzQ6NDcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFVzZSB4bWFsbG9jIGluc3RlYWQgb2YgYWxsb2NhIGZvciBBUkdTLgoKCSogbWFpbi5jIChtYWluKTogUHV0IHJlc3VsdCBvZiBhbGxvY2EgaW4gdGVtcG9yYXJ5IHZhcmlhYmxlIHdpdGgKCXNpbXBsZSBhc3NpZ25tZW50LCB0byBtYWtlIFNHSSBjb21waWxlciBoYXBweS4KClRodSBKdW4gIDMgMjA6MTU6NDYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny4zLgoKCSogbWFpbi5jIChtYWluKTogQmVmb3JlIHJlLWV4ZWNpbmcsIHJlbW92ZSBpbnRlcm1lZGlhdGUgZmlsZXMsIGFuZAoJcHJpbnQgdGhlIGRhdGEgYmFzZSB1bmRlciAtcC4gIFNleGllciBkZWJ1Z2dpbmcgbWVzc2FnZS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogQWxsb2NhdGUgYW4gZXh0cmEgY29weSBvZiB0aGUgbmFtZQoJb2YgYSB3aW5uaW5nIGludGVybWVkaWF0ZSBmaWxlIHdoZW4gcHV0dGluZyBpdCBpbiBGT1VORF9GSUxFUy4KCldlZCBKdW4gIDIgMTY6Mzg6MDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFBhc3MgZmxhZyAoMSkgdG8gcGFyc2VfZmlsZV9zZXEsIG5vdCB0bwoJbXVsdGlfZ2xvYiAod2hpY2ggZG9lc24ndCB0YWtlIGEgM3JkIGFyZykuCgoJKiBkaXIuYyAoZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3ApOiBXaGVuIHJlYWRpbmcgZGlyZW50cywgaWdub3JlCgljaGFycyB3aXRoaW4gRF9OQU1MRU4gdGhhdCBhcmUgTlVMcy4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRG9uJ3Qgc2F2ZXN0cmluZyBBUkdWWzBdIHRvIHB1dCBpdAoJaW50byBgb3RoZXJfYXJncycuCglGb3Igc3RyaW5nIHN3aXRjaCwgZG9uJ3Qgc2F2ZXN0cmluZyBgb3B0YXJnJy4KCShtYWluKTogRG9uJ3QgZnJlZSBlbHRzIG9mIG1ha2VmaWxlcy0+bGlzdCB0aGF0IGFyZSAiLSIuCglVc2UgYWxsb2NhJ2QgcmF0aGVyIHRoYW4gc2F2ZXN0cmluZydkIHN0b3JhZ2UgZm9yIGVsdHMgb2YKCW1ha2VmaWxlcy0+bGlzdCB0aGF0IGFyZSB0ZW1wb3JhcnkgZmlsZSBuYW1lcy4KCSogcmVhZC5jIChyZWFkX2FsbF9tYWtlZmlsZXMpOiBEb24ndCBmcmVlICpNQUtFRklMRVMuCgkqIGZpbGUuYyAoZW50ZXJfZmlsZSk6IERvbid0IHN0cmlwIGAuLydzLgoJKiBtYWluLmMgKGVudGVyX2NvbW1hbmRfbGluZV9maWxlKTogTmV3IGZ1bmN0aW9uLgoJKG1haW4pOiBVc2UgaXQgaW4gcGxhY2Ugb2YgZW50ZXJfZmlsZSBmb3IgY29tbWFuZC1saW5lIGdvYWxzIGZyb20KCW90aGVyX2ZpbGVzLCBhbmQgZm9yIG9sZF9maWxlcyBhbmQgbmV3X2ZpbGVzLgoKTW9uIE1heSAzMSAxODo0MTo0MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjIuCgoJKiBjb21wYXRNYWtlZmlsZSAoLlNVRkZJWEVTKTogQWRkIC5pbmZvLgoJKCQoaW5mb2RpcikvJChpbnN0bmFtZSkuaW5mbyk6IEZpbmQgbWFrZS5pbmZvKiBpbiBjd2QgaWYgdGhlcmUsCgllbHNlIGluICRzcmNkaXIuICBVc2UgYmFzZW5hbWUgdG8gcmVtb3ZlIGRpciBuYW1lIGZyb20gaW5zdGFsbGVkIG5hbWUuCgpUaHUgTWF5IDI3IDE3OjM1OjAyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IFdoZW4gaW50ZXJuaW5nIEZPVU5EX0ZJTEVTLCB0cnkKCWxvb2t1cF9maWxlIGZpcnN0OyBpZiBmb3VuZCwgZnJlZSB0aGUgc3RvcmFnZSBmb3Igb3VyIGNvcHkgb2YgdGhlIG5hbWUuCgpXZWQgTWF5IDI2IDE0OjMxOjIwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuMS4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSW4gdXNhZ2UgbXNnLCB3cml0ZSBgLS1zd2l0Y2g9QVJHJyBvcgoJYC0tc3dpdGNoWz1PUFRBUkddJyByYXRoZXIgdGhhbiBgLS1zd2l0Y2ggQVJHJyBvciBgLS1zd2l0Y2ggW0FSR10nLgoKTW9uIE1heSAyNCAxNjoxNzozMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChjb252ZXJ0X3N1ZmZpeF9ydWxlKTogTmV3IGZ1bmN0aW9uLgoJKGNvbnZlcnRfdG9fcGF0dGVybik6IFVzZSBpdCBpbnN0ZWFkIG9mIGRvaW5nIGFsbCB0aGUgd29yayBoZXJlCglzZXZlcmFsIHRpbWVzLgoJRm9yIHRhcmdldCBzdWZmaXggYC5hJywgZ2VuZXJhdGUgYm90aCB0aGUgYXJjaGl2ZSBtYWdpYyBydWxlIGFuZAoJdGhlIG5vcm1hbCBydWxlLgoKCSogY29tcGF0TWFrZWZpbGUgKGRpc3RjbGVhbik6IFJlbW92ZSBzdGFtcC1jb25maWcuCgpTYXQgTWF5IDIyIDE2OjE1OjE4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuCgoJKiBmaWxlLmMgKHJlbW92ZV9pbnRlcm1lZGlhdGVzKTogRG9uJ3Qgd3JpdGUgZXh0cmEgc3BhY2UgYWZ0ZXIgYHJtJy4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoLnR5cGUpOiBSZW1vdmUgYHVzYWdlX2FuZF9leGl0Jy4KCShwcmludF91c2FnZV9mbGFnKTogTmV3IHZhcmlhYmxlLgoJKHN3aXRjaGVzOiAtLWhlbHApOiBNYWtlIHR5cGUgYGZsYWcnLCB0byBzZXQgcHJpbnRfdXNhZ2VfZmxhZy4KCShpbml0X3N3aXRjaGVzKTogUmVtb3ZlIGB1c2FnZV9hbmRfZXhpdCcgY2FzZS4KCShkZWNvZGVfc3dpdGNoZXMpOiBMaWtld2lzZS4KCShkZWNvZGVfc3dpdGNoZXMpOiBQcmludCB1c2FnZSBpZiBwcmludF91c2FnZV9mbGFnIGlzIHNldC4KCVdoZW4gcHJpbnRpbmcgdXNhZ2UsIGRpZSB3aXRoIHN0YXR1cyBvZiBCQUQuCgkobWFpbik6IERpZSB3aXRoIDAgaWYgcHJpbnRfdmVyc2lvbl9mbGFnLgoKRnJpIE1heSAyMSAxNjowOToyOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY2LgoKV2VkIE1heSAxOSAyMTozMDo0NCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGxkaXJzKTogTmV3IHRhcmdldC4KCShpbnN0YWxsKTogRGVwZW5kIG9uIGl0LgoKU3VuIE1heSAxNiAyMDoxNTowNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY1LjIuCgpGcmkgTWF5IDE0IDE2OjQwOjA5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IEluIHJlbW92YWwgbG9vcCBmb3IgRElSUEFUSD09MCwKCXNldCBMQVNUUEFUSCB0byBQQVRILCBub3QgTkVYVC4KCgkqIGRpci5jIChyZWFkX2RpcnN0cmVhbSk6IEJyZWFrIG91dCBvZiBsb29wIGFmdGVyIGluY3JlbWVudGluZwoJRFMtPmJ1Y2tldHMgc3VjaCB0aGF0IGl0IHJlYWNoZXMgRElSRklMRV9CVUNLRVRTOyBhdm9pZCB0cnlpbmcgdG8KCWRlcmVmZXJlbmNlIERTLT5jb250ZW50cy0+ZmlsZXNbRElSRklMRV9CVUNLRVRTXS4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENsZWFyIG5vX3RhcmdldHMgYWZ0ZXIgcmVhZGluZyBhCgl0YXJnZXRmdWwgcnVsZSBsaW5lLgoKCSogbWFpbi5jIChtYWluKTogSWYgcHJpbnRfdmVyc2lvbl9mbGFnIGlzIHNldCwgZXhpdCBhZnRlciBwcmludGluZwoJdGhlIHZlcnNpb24uCgkoc3dpdGNoZXMpOiBDaGFuZ2UgLS12ZXJzaW9uIGRvY3N0cmluZyB0byBzYXkgaXQgZXhpdHMuCgoJKiBtYWtlLmggW2J1dHRlcmZseV06ICN1bmRlZiBQT1NJWC4KCldlZCBNYXkgMTIgMTU6MjA6MjEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjUuMS4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKSBbISBBSUFNQUddOiBEb24ndCBkZWNsYXJlIExPTkdfTkFNRS4KCVtBSUFNQUddOiBQYXNzIFRSVU5DQVRFIGZsYWcgYXJnIHRvICgqRlVOQ1RJT04pLCBhbHdheXMgemVyby4KCgkqIGZ1bmN0aW9uLmMgKGhhbmRsZV9mdW5jdGlvbik6IFVzZSBmYXRhbCBpbnN0ZWFkIG9mCgltYWtlZmlsZV9mYXRhbCB3aGVuIHJlYWRpbmdfZmlsZW5hbWUgaXMgbmlsLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfR0VUR1JPVVBTX1QuCgkqIGpvYi5jIChzZWFyY2hfcGF0aCk6IFVzZSBHRVRHUk9VUFNfVCBpbiBwbGFjZSBvZiBnaWRfdC4KClN1biBNYXkgIDkgMTU6NDE6MjUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NS4KCkZyaSBNYXkgIDcgMTg6MzQ6NTYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZ1bmN0aW9uLmMgKGhhbmRsZV9mdW5jdGlvbik6IEZhdGFsIGZvciB1bm1hdGNoZWQgcGFyZW4uCgpUaHUgTWF5ICA2IDE2OjEzOjQxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjQuMy4KCgkqIGNvbW1hbmRzLmMgKGhhbmRsaW5nX2ZhdGFsX3NpZ25hbCk6IE5ldyB2YXJpYWJsZS4KCShmYXRhbF9lcnJvcl9zaWduYWwpOiBTZXQgaXQuCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQXZvaWQgbm9ucmVlbnRyYW50IG9wZXJhdGlvbnMgaWYgdGhhdCBpcyBzZXQuCgkqIG1ha2UuaDogRGVjbGFyZSBoYW5kbGluZ19mYXRhbF9zaWduYWwuCgoJKiBleHBhbmQuYyAocmVmZXJlbmNlX3ZhcmlhYmxlKTogTmV3IGZ1bmN0aW9uLCBzbmlwcGV0IG9mIGNvZGUKCWJyb2tlbiBvdXQgb2Ygc2ltcGxlLXJlZmVyZW5jZSBjYXNlIG9mIHZhcmlhYmxlX2V4cGFuZC4KCSh2YXJpYWJsZV9leHBhbmQpOiBVc2UgaXQgZm9yIHNpbXBsZSByZWZzLgoJKHZhcmlhYmxlX2V4cGFuZCk6IFdoZW4gY2hlY2tpbmcgZm9yIGEgY29tcHV0ZWQgdmFyaWFibGUgbmFtZSwKCW5vdGljZSBhIGNvbG9uIHRoYXQgY29tZXMgYmVmb3JlIHRoZSBmaW5hbCBDTE9TRVBBUkVOLiAgRXhwYW5kCglvbmx5IHVwIHRvIHRoZSBjb2xvbiwgYW5kIHRoZW4gcmVwbGFjZSB0aGUgcGVuZGluZyB0ZXh0IHdpdGggYQoJY29weSBjb250YWluaW5nIHRoZSBleHBhbmRlZCBuYW1lIGFuZCBmYWxsIHRocm91Z2ggdG8gc3Vic3QgcmVmCgloYW5kbGluZy4KCSh2YXJpYWJsZV9leHBhbmQpOiBEb24ndCBib3RoZXIgZXhwYW5kaW5nIHRoZSBuYW1lIGlmIGEgY29sb24KCWFwcGVhcnMgYmVmb3JlIHRoZSBmaXJzdCAkLgoJKGV4cGFuZF9hcmd1bWVudCk6IFVzZSBhbGxvY2EgaW5zdGVhZCBvZiBzYXZlc3RyaW5nLgoJKHZhcmlhYmxlX2V4cGFuZCk6IEZvciBzdWJzdCByZWYsIGV4cGFuZCBib3RoIHNpZGVzIG9mID0gYmVmb3JlCglwYXNzaW5nIHRvIFtwYXRdc3Vic3RfZXhwYW5kLiAgVXNlIGZpbmRfcGVyY2VudCBpbnN0ZWFkIG9mIGxpbmRleAoJdG8gY2hlY2sgdGhlIGxocyBmb3IgYSAlLgoKV2VkIE1heSAgNSAxNDo0NTo1MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY0LjIuCgpNb24gTWF5ICAzIDE3OjAwOjMyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBhcnNjYW4uYyAoYXJfbmFtZV9lcXVhbCkgW0FJQU1BR106IEFib3J0IGlmIFRSVU5DQVRFRCBpcyBub256ZXJvLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUGFzcyBleHRyYSBhcmcgb2YgMSB0byBwYXJzZV9maWxlX3NlcSwKCW5vdCB0byBtdWx0aV9nbG9iLgoKVGh1IEFwciAyOSAxOTo0NzozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY0LjEuCgoJKiBhcnNjYW4uYyAoYXJfc2Nhbik6IE5ldyBsb2NhbCBmbGFnIHZhciBMT05HX05BTUUuICBTZXQgaXQgd2hlbgoJd2UgcmVhZCB0aGUgbWVtYmVyIG5hbWUgaW4gYW55IG9mIHRoZSBmYXNoaW9ucyB0aGF0IGFsbG93IGl0IHRvIGJlCglhcmJpdHJhcmlseSBsb25nLiAgUGFzcyBpdHMgbmVnYXRpb24gdG8gRlVOQ1RJT04uCgkoZGVzY3JpYmVfbWVtYmVyKTogVGFrZSBUUlVOQ0FURUQgZnJvbSBhcl9zY2FuIGFuZCBwcmludCBpdC4KCShhcl9uYW1lX2VxdWFsKTogVGFrZSBuZXcgYXJnIFRSVU5DQVRFRDsgaWYgbm9uemVybywgY29tcGFyZSBvbmx5Cgl0aGUgZmlyc3Qgc2l6ZW9mIChzdHJ1Y3QgYXJfaGRyLmFyX25hbWUpIGNoYXJzLgoJKGFyX21lbWJlcl9wb3MpOiBUYWtlIFRSVU5DQVRFRCBmcm9tIGFyX3NjYW4sIHBhc3MgdG8gYXJfbmFtZV9lcXVhbC4KCSogYXIuYyAoYXJfbWVtYmVyX2RhdGVfMSk6IExpa2V3aXNlLgoKV2VkIEFwciAyOCAyMToxODoyMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBCZWZvcmUgY2FsbGluZyBzdGFydF9qb2JfY29tbWFuZCB0byBzdGFydAoJdGhlIG5leHQgY29tbWFuZCBsaW5lLCByZXNldCBDLT5yZW1vdGUgYnkgY2FsbGluZyBzdGFydF9yZW1vdGVfam9iX3AuCgpNb24gQXByIDI2IDE1OjU2OjE1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgKGFyX3NjYW4pOiBOZXcgbG9jYWwgdmFyIE5BTUVNQVAuCglJbiBsb29wLCByZW5hbWUgTkFNRSB0byBOQU1FQlVGOyBuZXcgdmFyIE5BTUUgaXMgYSBwb2ludGVyOyBuZXcKCWZsYWcgSVNfTkFNRU1BUC4gIFdoZW4gZXh0cmFjdGluZyB0aGUgbWVtYmVyIG5hbWUsIGFsd2F5cyBwdXQgYQoJbnVsbCBhdCBpdHMgZW5kIGZpcnN0LiAgSWYgdGhlIG5hbWUgaXMgIi8vIiBvciAiL0FSRklMRU5BTUVTIiwgc2V0CglJU19OQU1FTUFQLiAgSWYgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgaW4gTkFNRU1BUCwgYW5kIE5BTUUgbG9va3MKCWxpa2UgIiAvTiIsIGdldCBmdWxsIG5hbWUgZnJvbSBOQU1FTUFQK04uCglFbHNlIGlmIE5BTUUgbG9va3MgbGlrZSAiIzEvTiIsIHJlYWQgTiBjaGFycyBmcm9tIHRoZQoJZWx0IGRhdGEgdG8gYmUgdGhlIGZ1bGwgbmFtZS4gIEF0IGVuZCBvZiBsb29wLCBpZiBJU19OQU1FTUFQLCByZWFkCgl0aGUgZWx0J3MgZGF0YSBpbnRvIGFsbG9jYSdkIE5BTUVNQVAuCgkoYXJfbmFtZV9lcXVhbCk6ICNpZiAwIHRydW5jYXRpbmcgY29kZS4KCgkqIG1ha2UuaDogRG9uJ3QgZGVjbGFyZSB2Zm9yayBhdCBhbGwuICBJdCByZXR1cm5zIGludCBhbnl3YXksCgl1bmxlc3MgPHVuaXN0ZC5oPiBkZWNsYXJlZCBpdDsgYW5kIHdlIGNvbmZsaWN0ZWQgd2l0aCBzb21lIHN5c3RlbXMuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBJZiBGTEFHU1RSSU5HWzFdIGlzICctJywgZGVmaW5lCglNQUtFRkxBR1MgdG8gYWxsIG9mIEZMQUdTVFJJTkcsIG5vdCAmRkxBR1NUUklOR1sxXS4gIERvbid0IHdhbnQgdG8KCWRlZmluZSBpdCB0byBzb21ldGhpbmcgbGlrZSAiLW5vLXByaW50LWRpcmVjdG9yeSIuCglVc2UgJWcgZm9ybWF0IGluc3RlYWQgb2YgJWYgZm9yIGZsb2F0aW5nLXZhbHVlZCB0aGluZ3MuCgpUaHUgQXByIDIyIDE4OjQwOjU4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAoTWFrZWZpbGUuaW4pOiBVc2UgYSBzdWJzdGl0dXRpb24gcmVmIG9uIG5vbGliLWRlcHMKCXRvIGNoYW5nZSByZW1vdGUtJS5kZXAgdG8gcmVtb3RlLXN0dWIuZGVwLgoKV2VkIEFwciAyMSAxNToxNzo1NCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY0LgoKRnJpIEFwciAxNiAxNDoyMjoyMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGwpOiBSZW1vdmUgLSBwcmVmaXggZnJvbSBjaGdycCtjaG1vZC4KCgkqIFZlcnNpb24gMy42My44LgoKVGh1IEFwciAxNSAxODoyNDowNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYWNjb25maWcuaDogTmV3IGZpbGU7IGNvbnRhaW5zICIjdW5kZWYgU0NDU19HRVQiIGZvciBhdXRvaGVhZGVyLgoJKiBjb25maWd1cmUuaW46IElmIC91c3Ivc2Njcy9nZXQgZXhpc3RzLCBkZWZpbmUgU0NDU19HRVQgdG8gdGhhdCwKCWVsc2UgdG8gImdldCIuCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpOiBTZXQgR0VUIHRvIG1hY3JvIFNDQ1NfR0VULgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFRha2UgZXh0cmEgYXJnIFNUUklQOyBzdHJpcCBgLi8nIG9ubHkKCWlmIG5vbnplcm8uICBJIGhvcGUgdGhpcyBpcyB0aGUgbGFzdCB0aW1lIHRoaXMgYXJndW1lbnQgaXMgYWRkZWQKCW9yIHJlbW92ZWQuCgkocmVhZF9tYWtlZmlsZSk6IFBhc3MgaXQgMSB3aGVuIHBhcnNpbmcgaW5jbHVkZSBmaWxlIG5hbWVzLgoJUGFzcyBpdCAxIHdoZW4gcGFyc2luZyB0YXJnZXQgZmlsZSBuYW1lcy4KCVBhc3MgaXQgMSB3aGVuIHBhcnNpbmcgc3RhdGljIHBhdHRlcm4gdGFyZ2V0IHBhdHRlcm4gbmFtZXMuCgkqIHJ1bGUuYyAoaW5zdGFsbF9wYXR0ZXJuX3J1bGUpOiBQYXNzIGl0IDEgd2hlbiBwYXJzaW5nIHJ1bGUgZGVwcy4KCSogZGVmYXVsdC5jIChzZXRfZGVmYXVsdF9zdWZmaXhlcyk6IFBhc3MgaXQgMSB3aGVuIHBhcnNpbmcKCWRlZmF1bHRfc3VmZml4ZXMuCgkqIGZ1bmN0aW9uLmMgKHN0cmluZ19nbG9iKTogUGFzcyBpdCAwIGhlcmUuCgpXZWQgQXByIDE0IDExOjMyOjA1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtaXNjLmMgKGxvZ19hY2Nlc3MpOiBOZXcgZnVuY3Rpb24uCgkoe2luaXQsdXNlcixtYWtlLGNoaWxkfV9hY2Nlc3MpOiBDYWxsIGl0LgoJKGNoaWxkX2FjY2Vzcyk6IEFib3J0IGlmICFhY2Nlc3NfaW5pdGVkLgoKCSogbWFpbi5jIChzd2l0Y2hlczogLS1uby1wcmludC1kaXJlY3RvcnkpOiBVc2UgMSBpbnN0ZWFkIG9mIC0xIGZvcgoJc2luZ2xlLWxldHRlciBvcHRpb24uCgkoaW5pdF9zd2l0Y2hlcywgZGVjb2RlX3N3aXRjaGVzLCBkZWZpbmVfbWFrZWZsYWdzKTogQW4gb3B0aW9uIHdpdGgKCW5vIHNpbmdsZS1sZXR0ZXIgdmVyc2lvbiBpcyBubyBsb25nZXIgaW5kaWNhdGVkIGJ5IGEgdmFsdWUgb2YgLTE7CglpbnN0ZWFkIGEgdmFsdWUgdGhhdCBpcyAhaXNhbG51bS4KCShpbml0X3N3aXRjaGVzKTogRG9uJ3QgcHV0IHN1Y2ggc3dpdGNoZXMgaW50byB0aGUgc3RyaW5nLCBvbmx5CglpbnRvIHRoZSBsb25nX29wdGlvbiB0YWJsZS4KCgkqIG1ha2UuaCBbIU5TSUddIFshX05TSUddOiAjZGVmaW5lIE5TSUcgMzIuCgoJKiBqb2IuYyBbSEFWRV9XQUlUUElEXTogUmVtb3ZlICN1bmRlZiBIQVZFX1VOSU9OX1dBSVQuICBBSVgncwoJYnNkY2MgZGVmaW5lZCBXSUYqIHRvIHVzZSB1bmlvbiB3YWl0LgoKCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gpOiBDaGFuZ2UgbWVtYmVyIGBjJyB0byB0eXBlIGludC4KCShzd2l0Y2hlcyk6IE1ha2UgY29uc3QuCgkoZGVjb2RlX3N3aXRjaGVzKTogVXNlIGBjb25zdCBzdHJ1Y3QgY29tbWFuZF9zd2l0Y2ggKicuCgkoZGVmaW5lX21ha2VmbGFncyk6IExpa2V3aXNlLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IEFkZCBgLW8gJEAnIHRvIG1ha2VpbmZvIHJ1bGVzLgoKTW9uIEFwciAxMiAxMjozMDowNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjcuCgoJKiBjb25maWd1cmUuaW4gKEFDX0hBVkVfSEVBREVSUyk6IENoZWNrIGZvciBzdHJpbmcuaCBhbmQgbWVtb3J5LmguCglSZW1vdmVkIEFDX01FTU9SWV9ILgoJKiBtYWtlLmggW1VTRywgTmVYVF06IERvbid0IHRlc3QgdGhlc2UuCglbSEFWRV9TVFJJTkdfSF06IFRlc3QgdGhpcyB0byBpbmNsdWRlIHN0cmluZy5oIGFuZCBkZWZpbmUgQU5TSV9TVFJJTkcuCglbSEFWRV9NRU1PUllfSF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIE5FRURfTUVNT1JZX0guCglbISBBTlNJX1NUUklOR106IFB1dCBkZWNscyBvZiBiY29weSBldCBhbCBoZXJlLgoJW3NwYXJjXTogRG9uJ3QgdGVzdCB0aGlzIGZvciBhbGxvY2EuaDsgSEFWRV9BTExPQ0FfSCBpcyBzdWZmaWNpZW50LgoJW0hBVkVfU0lHU0VUTUFTS106IFRlc3QgdGhpcyByYXRoZXIgdGhhbiBVU0cuCglbX19HTlVfTElCUkFSWV9fIHx8IFBPU0lYXTogRG9uJ3QgI2luY2x1ZGUgPHVuaXN0ZC5oPiBhZ2Fpbi4KCSogbWFpbi5jIChtYWluKTogSGFuZGxlIFNJR0NITEQgaWYgZGVmaW5lZCwgYW5kIFNJR0NMRCBpZiBkZWZpbmVkLgoJSXQgZG9lc24ndCBodXJ0IHRvIGRvIGJvdGggaWYgdGhleSBhcmUgYm90aCBkZWZpbmVkLCBhbmQgdGVzdGluZwoJVVNHIGlzIHVzZWxlc3MuCgkqIGRpci5jOiBSYXRpb25hbGl6ZSBkaXJlY3RvcnkgaGVhZGVyIGNvbmRpdGlvbmFscy4KCSogYXJzY2FuLmMgW0hBVkVfRkNOVExfSF06IFRlc3QgdGhpcyByYXRoZXIgdGhhbiBVU0cgfHwgUE9TSVguCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfc3VmZml4ZXMpOiBBZGQgYC50eGluZm8nLgoJKGRlZmF1bHRfc3VmZml4X3J1bGVzKTogQWRkIGAudHhpbmZvLmluZm8nIGFuZCBgLnR4aW5mby5kdmknIHJ1bGVzLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBSZXBsYWNlIFJFQ1VSU0lWRSBmbGFnCgl3aXRoIGVudW0gRkxBVk9SLCB3aGljaCBjYW4gYmUgc2ltcGxlLCByZWN1cnNpdmUsIG9yIGFwcGVuZC4KCVJlY29nbml6ZSArPSBhcyBhcHBlbmQgZmxhdm9yLiAgU2V0IG5ldyB2YXJpYWJsZSBWQUxVRSBpbiBhIHN3aXRjaAoJb24gRkxBVk9SLiAgRm9yIGFwcGVuZCBmbGF2b3IsIHByZXBlbmQgdGhlIHZhcmlhYmxlJ3Mgb2xkIHZhbHVlLgoJSWYgdGhlIHZhcmlhYmxlIHdhcyBwcmV2aW91c2x5IGRlZmluZWQgcmVjdXJzaXZlLCBzZXQgRkxBVk9SIHRvCglyZWN1cnNpdmU7IGlmIGl0IHdhcyBkZWZpbmVkIHNpbXBsZSwgZXhwYW5kIHRoZSBuZXcgdmFsdWUgYmVmb3JlCglhcHBlbmRpbmcgaXQgdG8gdGhlIG9sZCB2YWx1ZS4gIFBhc3MgUkVDVVJTSVZFIGZsYWcgdG8KCWRlZmluZV92YXJpYWJsZSBpZmYgRkxBVk9SID09IHJlY3Vyc2l2ZS4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogVXNlIGFsbG9jYSBhbmQgYmNvcHkgZm9yCglOQU1FLCBpbnN0ZWFkIG9mIHNhdmVzdHJpbmcuICBNaWdodCBhcyB3ZWxsIHVzZSBzdGFjayBzdG9yYWdlCglzaW5jZSB3ZSBmcmVlIGl0IGltbWVkaWF0ZWx5IGFueXdheS4KClRodSBBcHIgIDggMTg6MDQ6NDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYnMpOiBNb3ZlIGRlY2wgb2YgSk9CIG91dHNpZGUgb2YgbG9vcC4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFJlbmFtZSBgc3RydWN0IGZsYWcnIG1lbWJlciBgc3dpdGNoJwoJdG8gYGNzJywgd2hpY2ggaXMgbm90IGEgcmVzZXJ2ZWQgd29yZC4KCldlZCBBcHIgIDcgMTU6MzA6NTEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChuZXdfam9iKTogQ2FsbCBzdGFydF93YWl0aW5nX2pvYnMgZmlyc3QgdGhpbmcuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBDaGFuZ2VkIHJldHVybiB0eXBlIGZyb20gdm9pZCB0byBpbnQuCglSZXR1cm4gMCB3aGVuIHB1dHRpbmcgdGhlIGNoaWxkIG9uIHRoZSB3YWl0aW5nX2pvYnMgY2hhaW4uCgkoc3RhcnRfd2FpdGluZ19qb2JzKTogRG9uJ3QgY2hlY2sgbG9hZCBhbmQgam9iX3Nsb3RzIGhlcmUuCglBbHdheXMgdGFrZSBhIGpvYiBvZmYgdGhlIGNoYWluIGFuZCBjYWxsIHN0YXJ0X3dhaXRpbmdfam9iIG9uIGl0OwoJZ2l2ZSB1cCBhbmQgcmV0dXJuIHdoZW4gc3RhcnRfd2FpdGluZ19qb2IgcmV0dXJucyB6ZXJvLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzOiBzdHJ1Y3QgZmxhZyk6IENoYW5nZSBtZW1iZXIgYGNoYXIgYycgdG8KCWBzdHJ1Y3QgY29tbWFuZF9zd2l0Y2ggKnN3aXRjaCcuCgkoQUREX0ZMQUcpOiBTZXQgdGhhdCB0byBDUyBpbnN0ZWFkIG9mIENTLT5jLgoJSWYgQ1MtPmMgaXMgLTEsIGluY3JlbWVudCBGTEFHU0xFTiBmb3IgdGhlIGxvbmcgbmFtZS4KCVdoZW4gd3JpdGluZyBvdXQgRkxBR1MsIGhhbmRsZSBGTEFHUy0+c3dpdGNoLT5jID09IC0xIGFuZCB3cml0ZQoJdGhlIGxvbmcgbmFtZSBpbnN0ZWFkLgoKCSogY29tcGF0TWFrZWZpbGUgKHN0YW1wLWNvbmZpZyk6IE5ldyB0YXJnZXQgb2Ygb2xkIGNvbmZpZy5oIHJ1bGUuCglUb3VjaCBzdGFtcC1jb25maWcgYWZ0ZXIgcnVubmluZyBjb25maWcuc3RhdHVzLgoJKGNvbmZpZy5oKTogSnVzdCBkZXBlbmQgb24gc3RhbXAtY29uZmlnLCBhbmQgaGF2ZSBlbXB0eSBjb21tYW5kcy4KCk1vbiBBcHIgIDUgMjA6MTQ6MDIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIFtIQVZFX1dBSVRQSURdOiAjdW5kZWYgSEFWRV9VTklPTl9XQUlULgoKCSogY29uZmlndXJlLmluIChBQ19IQVZFX0ZVTkNTKTogQ2hlY2sgZm9yIHBzaWduYWwuCgpGcmkgQXByICAyIDE3OjE1OjQ2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBSZW1vdmUgIm5ldyI7IGl0IGlzIGFscmVhZHkgYW4KCXVuYW1iaWd1b3VzIHByZWZpeCBvZiAibmV3LWZpbGUiLgoKU3VuIE1hciAyOCAxNjo1NzoxNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My42LgoKV2VkIE1hciAyNCAxNDoyNjoxOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFdoZW4gYWRkaW5nIHRoZQoJbmFtZS13aXRoaW4tZGlyZWN0b3J5IGF0IHRoZSBlbmQgb2YgTkFNRSwgYW5kIHdlIGRvbid0IGFkZCBhCglzbGFzaCwgZG9uJ3QgY29weSBGSUxFTkFNRSBpbiBvbmUgY2hhciB0b28gZmFyIGludG8gTkFNRS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogRmluZCBkZWZhdWx0X3NoZWxsJ3MKCWxlbmd0aCB3aXRoIHN0cmxlbiwgbm90IG51bWVyb2xvZ3kuCgpXZWQgTWFyIDE3IDIwOjAyOjI3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBBZGQgdGhlIGVsdHMgb2YgYSBzdHJpbmcgb3B0aW9uIGluCglyZXZlcnNlIG9yZGVyLCBzbyB0aGV5IGNvbWUgb3V0IHJpZ2h0IHdoZW4gcmV2ZXJzZWQgYWdhaW4uCgpGcmkgTWFyIDEyIDE1OjM4OjQ1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKG1ha2UuaW5mbyk6IFVzZSBgLW8gbWFrZS5pbmZvJy4KClRodSBNYXIgMTEgMTQ6MTM6MDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoUkVNT1RFKTogU2V0IHRvIEBSRU1PVEVAOyBjaGFuZ2UgY29tbWVudHMgdG8KCXJlZmxlY3QgbmV3IHVzZS4KCShvYmpzKTogUmVwbGFjZSByZW1vdGUubyB3aXRoIHJlbW90ZS0kKFJFTU9URSkuby4KCShzcmNzKTogUmVwbGFjZSByZW1vdGUuYyB3aXRoIHJlbW90ZS0kKFJFTU9URSkuYy4KCShyZW1vdGUubyk6IFJ1bGUgcmVtb3ZlZC4KCgkqIGNvbmZpZ3VyZS5pbiAoUkVNT1RFKTogU3Vic3QgdGhpcyBpbiBNYWtlZmlsZSBldCBhbDsgZGVmYXVsdCAic3R1YiIuCglVc2UgQUNfV0lUSCB0byBncm9rIC0td2l0aC1jdXN0b21zIGFyZyB0byBzZXQgUkVNT1RFPWNzdG1zLgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBGaWx0ZXIgb3V0IHJlbW90ZS0lIGZyb20gb2JqcyBsaXN0LgoJKiBidWlsZC50ZW1wbGF0ZSAoUkVNT1RFKTogTmV3IHZhcjsgc2V0IHRvIEBSRU1PVEVALgoJKG9ianMpOiBBZGQgcmVtb3RlLSR7UkVNT1RFfS5vLgoKV2VkIE1hciAxMCAxNToxMjoyNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My41LgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBGaXggImRlcGVuZGVudCItPiJkZXBlbmRlbmN5IiBpbgoJIlJlamVjdGluZyBpbXBvc3NpYmxlIiAtZCBtc2cuCgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IE5ldyBsb2NhbCB2YXJzIHtPTEQsTkVXfUJVQ0tFVC4gIFN0b3JlCgltb2QnZCB2YWx1ZXMgdGhlcmU7IG5ldmVyIG1vZCB7T0xELE5FV31IQVNILgoKTW9uIE1hciAgOCAxMzozMjo0OCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jIFtldGExMF06IEluY2x1ZGUgPGZjbnRsLmg+IGluc3RlYWQgb2YgPHN5cy9maWxlLmg+LgoKCSogY29tcGF0TWFrZWZpbGUgKFZQQVRIKTogU2V0IHRoaXMgdG8gQHNyY2RpckAuCgkoc3JjZGlyKTogU2V0IHRoaXMgdG8gJChWUEFUSCkuCgoJKiBtYWluLmMgKG1haW4pOiBOZXcgbG9jYWwgdmFyIERJUkVDVE9SWV9CRUZPUkVfQ0hESVIuICBTYXZlIGluIGl0CglhIGNvcHkgb2YgQ1VSUkVOVF9ESVJFQ1RPUlkgYWZ0ZXIgdGhlIGZpcnN0IGdldGN3ZC4gIFVzZSBpdAoJaW5zdGVhZCBvZiBDVVJSRU5UX0RJUkVDVE9SWSB3aGVuIGNoZGlyJ2luZyBiYWNrIGJlZm9yZSByZS1leGVjaW5nLgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogUGFzcyBtaXNzaW5nIFNFQVJDSCBhcmcgdG8gZl9tdGltZS4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJlbW92ZSBleHRyYW5lb3VzIGFyZyB0byBwYXJzZV9maWxlX3NlcS4KCk1vbiBGZWIgMjIgMTQ6MTk6MzggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBVc2UgLCBpbnN0ZWFkIG9mIC8KCWFzIHRoZSBzZWQgZGVsaW1pdGVyIGNoYXIuCgpTdW4gRmViIDIxIDE0OjExOjA0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuNC4KCgkqIHJ1bGUuaCAoc3RydWN0IHJ1bGUpOiBSZW1vdmVkIGBzdWJkaXInIG1lbWJlci4KCSogcnVsZS5jIChuZXdfcGF0dGVybl9ydWxlKTogTm8gbmVlZCB0byBjbGVhciBpdC4KCShjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IFNldCB0aGUgYGNoYW5nZWQnIGZsYWcgaW4gZWFjaCBkZXAKCXRoYXQgcmVmZXJzIHRvIGEgbm9uZXhpc3RlbnQgZGlyZWN0b3J5LiAgTm8gbG9uZ2VyIHNldCBydWxlLWdsb2JhbAoJYHN1YmRpcicgZmxhZyB3aXRoIHRoYXQgaW5mb3JtYXRpb24uCgkocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBEb24ndCByZWNvcmQgaW5mbyBvbiBgc3ViZGlyJyBmbGFncy4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogQ2hlY2sgdGhlIERFUC0+Y2hhbmdlZCBmbGFnIHJhdGhlcgoJdGhhbiB0aGUgKG5vdyBnb25lKSBSVUxFLT5zdWJkaXIgZmxhZy4gIEFsc28gdGVzdCBDSEVDS19MQVNUU0xBU0g7CglpZiBpdCBpcyBzZXQsIHRoZSBmaWxlIG1pZ2h0IGV4aXN0IGV2ZW4gdGhvdWdoIHRoZSBERVAtPmNoYW5nZWQKCWZsYWcgaXMgc2V0LgoKCSogcnVsZS5jIChjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IFBhc3MgIiIsIG5vdCAiLiIsIGFzIGZpbGUKCW5hbWUgYXJnIHRvIGRpcl9maWxlX2V4aXN0c19wIHRvIGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgZGlyZWN0b3J5LgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBJbnNpZGUgZGVwLWZpbmRpbmcgbG9vcCwgc2V0CglDSEVDS19MQVNUU0xBU0ggZnJvbSB0aGUgdmFsdWUgcmVjb3JkZWQgaW4gQ0hFQ0tFRF9MQVNUU0xBU0hbSV0sCglyYXRoZXIgdGhhbiBjb21wdXRpbmcgaXQgYW5ldy4KCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IE11c3QgYWxsb2NhIHNwYWNlIGZvciBQRVJDRU5UCglhbmQgY29weSBpdCwgdG8gYXZvaWQgbGVhdmluZyB0aGUgdHJhaWxpbmcgYCknIGluIHRoZSB2YWx1ZS4KCgkqIG1pc2MuYyAocmVtb3ZlX2NvbW1lbnRzKTogRml4ZWQgYmFja3NsYXNoLWNoZWNraW5nIGxvb3AKCWNvbmRpdGlvbiB0byBhbGxvdyBpdCB0byBsb29rIGF0IHRoZSBmaXJzdCBjaGFyIG9uIHRoZSBsaW5lLgoJUDIgPj0gTElORSwgbm90IFAyID4gTElORS4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGJpbmRpcikvJChpbnN0bmFtZSkpOiBCZWZvcmUgbW92aW5nICRALm5ldyB0bwoJJEAsIHJtICRALm9sZCBhbmQgbXYgJEAgdG8gJEAub2xkLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBUYWtlIG5ldyBhcmdzIEZJTEVOQU1FIGFuZAoJTElORU5PLiAgRmF0YWwgaWYgdGhlIHZhcmlhYmxlIG5hbWUgaXMgZW1wdHkuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENoYW5nZSBjYWxsZXJzLgoJKiBtYWluLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChncm91cCk6IERlZmluZSB0byBAS01FTV9HUk9VUEAsIGF1dG9jb25mIG1hZ2ljCgl0aGF0IGNvbmZpZ3VyZSB3aWxsIHJlcGxhY2Ugd2l0aCB0aGUgZ3JvdXAgb3duaW5nIC9kZXYva21lbS4KCk1vbiBGZWIgIDggMTQ6MjY6NDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jICh2cGF0aF9zZWFyY2gpOiBUYWtlIHNlY29uZCBhcmcgTVRJTUVfUFRSLCBwYXNzIHRocnUgdG8KCXNlbGVjdGl2ZV92cGF0aF9zZWFyY2guCgkoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFRha2Ugc2Vjb25kIGFyZyBNVElNRV9QVFIuCglJZiB0aGUgZGlyIGNhY2hlIHRoaW5rcyBhIGZpbGUgZXhpc3RzLCBzdGF0IGl0IHRvIG1ha2Ugc3VyZSwgYW5kCglwdXQgdGhlIG1vZHRpbWUgaW4gKk1USU1FX1BUUi4KCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogVGFrZSBzZWNvbmQgYXJnIE1USU1FX1BUUi4KCVdoZW4gd2UgZmluZCBhIG1hdGNoLCByZWNvcmQgaXRzIG10aW1lIHRoZXJlLgoJUGFzcyBNVElNRV9QVFIgdGhyb3VnaCB0byB2cGF0aF9zZWFyY2ggdG8gZG8gc2FtZS4KCShmX210aW1lKTogUGFzcyAmTVRJTUUgYXMgbmV3IDJuZCBhcmcgdG8ge3ZwYXRoLGxpYnJhcnl9X3NlYXJjaDsKCXN0b3JlIGl0IGluIEZJTEUtPmxhc3RfbXRpbWUgaWYgc2V0IG5vbnplcm8uCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogUGFzcyBuaWwgMm5kIGFyZyB0byB2cGF0aF9zZWFyY2guCgoJKiBjb21wYXRNYWtlZmlsZSAocmVtb3RlLm8pOiBQcmVwZW5kIGAkKHNyY2RpcikvJyB0byBgcmVtb3RlLSouYycsCglzbyBnbG9iYmluZyBsb29rcyBzb21ld2hlcmUgaXQgd2lsbCBmaW5kIHRoaW5ncy4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBJbnN0YWxsIGBtYWtlLmluZm8qJwoJbm90IGAkKHNyY2RpcikvbWFrZS5pbmZvKic7IG5vIG5lZWQgdG8gdXNlIGJhc2VuYW1lLgoKRnJpIEZlYiAgNSAxMjo1Mjo0MyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My4zLgoKCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGwpOiBBZGQgbWlzc2luZyA7XHMuCgoJTWFrZSAtLCBALCBhbmQgKyBwcmVmaXhlcyBvbiBhIHByZS1leHBhbmRlZCBjb21tYW5kIGxpbmUgYWZmZWN0CglhbGwgbGluZXMgaW4gdGhlIGV4cGFuc2lvbiwgbm90IGp1c3QgdGhlIGZpcnN0LgoJKiBjb21tYW5kcy5oIChzdHJ1Y3QgY29tbWFuZHMpOiBSZXBsYWNlIGBsaW5lc19yZWN1cnNlJyBtZW1iZXIKCXdpdGggYGxpbmVzX2ZsYWdzJy4KCShDT01NQU5EU197UkVDVVJTRSxTSUxFTlQsTk9FUlJPUn0pOiBOZXcgbWFjcm9zLCBiaXRzIHRvIHNldCBpbgoJdGhhdCBmbGFnIGJ5dGUuCgkqIGNvbW1hbmRzLmMgKGNob3BfY29tbWFuZHMpOiBTZXQgYGxpbmVzX2ZsYWdzJyBpbnN0ZWFkIG9mCglgbGluZXNfcmVjdXJzZScuICBSZWNvcmQgbm90IG9ubHkgKyBidXQgYWxzbyBAIGFuZCAtIHByZWZpeGVzLgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBDaGVjayB0aGUgQ09NTUFORFNfUkVDVVJTRSBiaXQKCWluIEZJTEUtPmNtZHMtPmxpbmVzX2ZsYWdzLCByYXRoZXIgdGhhbiBGSUxFLT5jbWRzLT5saW5lc19yZWN1cnNlLgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBSZXBsYWNlZCBSRUNVUlNJVkUgYW5kIE5PUFJJTlQgbG9jYWwKCXZhciB3aXRoIEZMQUdTOyBpbml0aWFsaXplIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBgbGluZXNfZmxhZ3MnIGJ5dGUuCglTZXQgQ0hJTEQtPm5vZXJyb3IgaWYgdGhlIENPTU1BTkRTX05PRVJST1IgYml0IGlzIHNldCBpbiBGTEFHUy4KCVNldCB0aGUgQ09NTUFORFNfU0lMRU5UIGJpdCBpbiBGTEFHUyBmb3IgYSBAIHByZWZpeC4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IFNldCBHLT5maWxlIHRvIGl0cyBwcmV2IGFmdGVyCgljaGVja2luZyBmb3IgRyBiZWluZyBmaW5pc2hlZCwgc2luY2UgdGhhdCBjaGVjayBuZWVkcyB0byBleGFtaW5lCglHLT5maWxlLgoKCSogY29uZmlndXJlLmluICh1bmlvbiB3YWl0IGNoZWNrKSBbSEFWRV9XQUlUUElEXTogVHJ5IHVzaW5nCgl3YWl0cGlkIHdpdGggYSBgdW5pb24gd2FpdCcgU1RBVFVTIGFyZy4gIElmIHdhaXRwaWQgYW5kIHVuaW9uIHdhaXQKCWRvbid0IHdvcmsgdG9nZXRoZXIsIHdlIHNob3VsZCBub3QgdXNlIHVuaW9uIHdhaXQuCgoJKiBWZXJzaW9uIDMuNjMuMi4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IFdoZW4gRy0+ZmlsZS0+dXBkYXRlZCwgbW92ZQoJRy0+ZmlsZSB0byBpdHMgcHJldi4gIFdlIGFyZW4ndCBmaW5pc2hlZCB1bnRpbCBHLT5maWxlIGlzIG5pbC4KClRodSBGZWIgIDQgMTI6NTM6MDQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoc3RhcnRpbmdfZGlyZWN0b3J5KTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShtYWluKTogU2V0IGl0IHRvIGN3ZCBhZnRlciBkb2luZyAtQ3MuCgkobG9nX3dvcmtpbmdfZGlyZWN0b3J5KTogVXNlIGl0LCByYXRoZXIgdGhhbiBjb21wdXRpbmcgZWFjaCB0aW1lLgoJKiBtYWtlLmg6IERlY2xhcmUgaXQuCgoJKiBjb21wYXRNYWtlZmlsZSAoU0hFTEwpOiBEZWZpbmUgdG8gL2Jpbi9zaCBmb3IgbG9zaW5nIFVuaXggbWFrZXMuCgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBBbGxvY2F0ZSAoMSArIExFTiArIDEpIHdvcmRzIGZvcgoJQVJHViwgcmF0aGVyIHRoYW4gTEVOIHdvcmRzIHBsdXMgb25lIGJ5dGUuCgpXZWQgRmViICAzIDE4OjEzOjUyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKCQoYmluZGlyKS8kKGluc3RuYW1lKSk6IFB1dCAtIGJlZm9yZQoJaW5zdGFsbF9zZXRnaWQgY29tbWFuZCBsaW5lLCBzbyBpdHMgZmFpbHVyZSB3b24ndCBiZSBhbiBlcnJvci4KCShpbmZvZGlyKTogTmV3IHZhcmlhYmxlLgoJKGluc3RhbGwpOiBEZXBlbmQgb24gJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvLgoJKCQoaW5mb2RpcikvJChpbnN0bmFtZSkuaW5mbyk6IE5ldyB0YXJnZXQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJZiBGSUxFTkFNRVMgaXMgbmlsIHdoZW4gd2Ugc2VlIGEgbGluZQoJc3RhcnRpbmcgd2l0aCBhIHRhYiwgZG9uJ3QgdHJlYXQgaXQgYXMgYSBjb21tYW5kLiAgSnVzdCBmYWxsCgl0aHJvdWdoLCByYXRoZXIgdGhhbiBnaXZpbmcgYW4gZXJyb3IuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJZiB0aGUgTk9fVEFSR0VUUyBmbGFnIGlzIHNldCB3aGVuIHdlIHNlZSBhCgljb21tYW5kIGxpbmUsIGRvbid0IGNsZWFyIGl0IGJlZm9yZSBjb250aW51aW5nLiAgV2Ugd2FudAoJc3Vic2VxdWVudCBjb21tYW5kIGxpbmVzIHRvIGJlIGlnbm9yZWQgYXMgd2VsbC4KCgkqIGpvYi5jIChuZXdfam9iKTogQmVmb3JlIGV4cGFuZGluZyBlYWNoIGNvbW1hbmQgbGluZSwgY29sbGFwc2UKCWJhY2tzbGFzaC1uZXdsaW5lIGNvbWJpbmF0aW9ucyB0aGF0IGFyZSBpbnNpZGUgdmFyIG9yIGZuIHJlZmVyZW5jZXMuCgpNb24gRmViICAxIDE2OjAwOjEzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGV4ZWNfcHJlZml4KTogRGVmYXVsdCB0byAkKHByZWZpeCksIG5vdCAvdXNyL2xvY2FsLgoKCSogY29tcGF0TWFrZWZpbGUgKG1ha2UuaW5mbyk6IFBhc3MgLUkkKHNyY2RpcikgdG8gbWFrZWluZm8uCgoJKiBqb2IuYyBbUE9TSVhdICh1bmJsb2NrX3NpZ3MpOiBNYWRlIGdsb2JhbC4KCVshUE9TSVhdICh1bmJsb2NrX3NpZ3MpOiBNb3ZlIGRlZm5zIHRvIGpvYi5oLgoJKiBqb2IuaCBbUE9TSVhdICh1bmJsb2NrX3NpZ3MpOiBEZWNsYXJlLgoKU3VuIEphbiAzMSAxOToxMTowNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEluIHZwYXRoIHBhcnNpbmcsIGFmdGVyIGZpbmRpbmcgdGhlCglwYXR0ZXJuIHRva2VuLCB0YWtlIGVudGlyZSByZXN0IG9mIGxpbmUgYXMgdGhlIHNlYXJjaCBwYXRoLCBub3QKCWp1c3QgdGhlIG5leHQgdG9rZW4uCgoJKiBjb21wYXRNYWtlZmlsZSAocmVtb3RlLm8pOiBEZXBlbmQgb24gcmVtb3RlLSouYy4KClRodSBKYW4gMjggMTY6NDA6MjkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IERvbid0IGRlZmluZSBhbnkgRiBvciBEIHZlcnNpb25zLgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IERlZmluZSB0aGVtIGhlcmUgYXMKCXJlY3Vyc2l2ZWx5LWV4cGFuZGVkIHZhcmlhYmxlcyB0aGF0IHVzZSB0aGUgZGlyIGFuZCBub3RkaXIgZnVuY3MuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBJbiB2X2RlZmF1bHQgY2FzZSwgZG9uJ3QgZXhwb3J0CglvX2RlZmF1bHQgb3Igb19hdXRvbWF0aWMgdmFyaWFibGVzLgoKCSogY29uZmlndXJlLmluICh1bmlvbiB3YWl0IGNoZWNrKTogUmVtb3ZlIGAgYW5kICcgaW5zaWRlIEMgY29kZTsKCXRoZXkgY29uZnVzZSB0aGUgc2hlbGwgc2NyaXB0LgoKTW9uIEphbiAyNSAxMzoxMDo0MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjEuCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IFdoZW4gc2tpcHBpbmcgZnVydGhlciBwcm9jZXNzaW5nCglvZiBhbiBlbHQgdGhhdCBpcyAiLiIsIGRvbid0IGFsc28gc2tpcCB0aGUgY29kZSB0aGF0IHB1c2hlcyBQIHBhc3QKCXRoZSBuZXh0IHNlcGFyYXRvci4KCgkqIGNvbXBhdE1ha2VmaWxlIChkaXN0Y2xlYW4pOiBEb24ndCByZW1vdmUgbWFrZS0qLgoKCSogY29uZmlndXJlLmluIChIQVZFX1VOSU9OX1dBSVQpOiBUcnkgdG8gdXNlIFdFWElUU1RBVFVTIGlmIGl0J3MKCWRlZmluZWQuICBJZiBvbmUgY2Fubm90IHVzZSBXRVhJVFNUQVRVUyB3aXRoIGEgYHVuaW9uIHdhaXQnCglhcmd1bWVudCwgd2UgZG9uJ3Qgd2FudCB0byBiZWxpZXZlIHRoZSBzeXN0ZW0gaGFzIGB1bmlvbiB3YWl0JyBhdCBhbGwuCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGUpOiBEbyBub3RoaW5nIHRvIHByaW50ICJ1cCB0byBkYXRlIiBtc2dzLgoJKHVwZGF0ZV9nb2FsX2NoYWluKTogRG8gaXQgaGVyZSBpbnN0ZWFkLgoJVXNlIHRoZSBgY2hhbmdlZCcgZmxhZyBvZiBlYWNoIGdvYWwncyBgc3RydWN0IGRlcCcgdG8ga2VlcCB0cmFjawoJb2Ygd2hldGhlciBmaWxlc19yZW1hZGUgKG5vdyBjb21tYW5kc19zdGFydGVkKSBjaGFuZ2VkIGFyb3VuZCBhCgljYWxsIHRvIHVwZGF0ZV9maWxlIGZvciB0aGF0IGdvYWwuCglXaGVuIGEgZ29hbCBpcyBmaW5pc2hlZCwgYW5kIGl0cyBmaWxlJ3MgdXBkYXRlX3N0YXR1cyBpcyB6ZXJvIChpLmUuLAoJc3VjY2VzcyBvciBub3RoaW5nIGRvbmUpLCB0ZXN0IHRoZSBgY2hhbmdlZCcgZmxhZyBhbmQgZ2l2ZSBhbiAidXAKCXRvIGRhdGUiIG1zZyBpZmYgaXQgaXMgY2xlYXIuCgkqIG1ha2UuaCAoZmlsZXNfcmVtYWRlKTogUmVuYW1lZCB0byBjb21tYW5kc19zdGFydGVkLgoJKiByZW1ha2UuYzogQ2hhbmdlZCBkZWZuLgoJKHVwZGF0ZV9nb2FsX2NoYWluKTogQ2hhbmdlZCB1c2VzLgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBJbmNyZW1lbnQgY29tbWFuZHNfc3RhcnRlZCBoZXJlLgoJKHJlYXBfY2hpbGRyZW4pOiBOb3QgaGVyZS4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IERvbid0IGRvIGFueXRoaW5nIHdpdGggZmlsZXMnCglgcHJldicgbWVtYmVycy4gIHVwZGF0ZV9maWxlIG5vdyBjb21wbGV0ZWx5IGhhbmRsZXMgdGhpcy4KCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IERvbid0IGV4cGFuZCByZWN1cnNpdmUKCXZhcmlhYmxlcyBpZiB0aGV5IGNhbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBGb3IgZmxhZ3Mgd2l0aCBvbWl0dGVkIG9wdGlvbmFsIGFyZ3MsCglzdG9yZSB7IiIsIDB9IHdpdGggQUREX0ZMQUcuICBXaGVuIGNvbnN0cnVjdGluZyBGTEFHU1RSSU5HLCBhIGZsYWcKCXNvIHN0b3JlZCBjYW5ub3QgaGF2ZSBtb3JlIGZsYWdzIGFwcGVuZGVkIHRvIHRoZSBzYW1lIHdvcmQuCgpGcmkgSmFuIDIyIDE0OjQ2OjE2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jIChwcmludF92YXJpYWJsZV9zZXQpOiBJbiB2YXJzL2J1Y2tldCBjYWxjdWxhdGlvbiwKCWRvbid0IHNwdXJpb3VzbHkgbXVsdGlwbHkgYnkgMTAwLgoKCSogVmVyc2lvbiAzLjYzLgoKCSogam9iLmMgWyFIQVZFX1VOSU9OX1dBSVRdIChXVEVSTVNJRywgV0NPUkVEVU1QLCBXRVhJVFNUQVRVUyk6CglEb24ndCBkZWZpbmUgaWYgYWxyZWFkeSBkZWZpbmVkLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogRG9uJ3Qga2VlcCB0cmFjayBvZiB0aGUgY29tbWFuZF9zdGF0ZSBiZWZvcmUKCWNhbGxpbmcgdXBkYXRlX2ZpbGVfMS4gIFJlbW92ZSBsb2NhbCB2YXJpYWJsZSBDT01NQU5EU19GSU5JU0hFRCwKCWFuZCBkb24ndCB0ZXN0IGl0IHRvIGRlY2lkZSB0byBwcmludCB0aGUgImlzIHVwIHRvIGRhdGUiIG1zZy4KCVRlc3RpbmcgZm9yIGZpbGVzX3JlbWFkZSBoYXZpbmcgY2hhbmdlZCBzaG91bGQgYWx3YXlzIGJlIHN1ZmZpY2llbnQuCglUaGUgb2xkIG1ldGhvZCBsb3N0IHdoZW4gd2UgYXJlIGNhbGxlZCBpbiB0aGUgZ29hbCBjaGFpbiBydW4gb24gYQoJbWFrZWZpbGUsIGJlY2F1c2UgdGhlIG1ha2VmaWxlJ3MgY29tbWFuZF9zdGF0ZSBpcyBhbHJlYWR5CglgY3NfZmluaXNoZWQnIGZyb20gdGhlIG1ha2VmaWxlIGNoYWluIHJ1bi4KCgkqIG1pc2MuYyBbSEFWRV9TRVRSRVtHVV1JRF06IFRlc3QgdGhlc2UgdG8gZGVjbCBzZXRyZVtndV1pZC4KCgkqIGNvbmZpZ3VyZS5pbjogUmV3cm90ZSB3YWl0IGNoZWNraW5nLgoJVXNlIEFDX0hBVkVfSEVBREVSUyB0byBjaGVjayBmb3IgPHN5cy93YWl0Lmg+LgoJVXNlIEFDX0hBVkVfRlVOQ1MgdG8gY2hlY2sgZm9yIHdhaXRwaWQgYW5kIHdhaXQzLgoJVXNlIGEgY29tcGlsZSBjaGVjayB0byB0ZXN0IGp1c3QgZm9yIGB1bmlvbiB3YWl0Jy4KCSogam9iLmM6IFJld3JvdGUgY29uZGl0aW9uYWxzIGFjY29yZGluZ2x5LgoJW0hBVkVfV0FJVFBJRF06IFRlc3QgdGhpcyBvbmx5IHRvIGRlZmluZSBXQUlUX05PSEFORy4KCVtIQVZFX1dBSVQzXTogTGlrZXdpc2UuCglbSEFWRV9VTklPTl9XQUlUXTogVGVzdCB0aGlzIHRvIGRlZmluZSBXQUlUX1QgYW5kIFcqLgoKCSogY29uZmlndXJlLmluOiBTZXQgQ0ZMQUdTIGFuZCBMREZMQUdTIGJlZm9yZSBhbGwgY2hlY2tzLgoKCSogZGlyLmM6IEFkZCBzdGF0aWMgZm9yd2FyZCBkZWNscyBvZiB7b3BlbixyZWFkfV9kaXJzdHJlYW0uCgpUaHUgSmFuIDIxIDE3OjE4OjAwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjMxLgoKCSogam9iLmMgW05HUk9VUFNfTUFYICYmIE5HUk9VUFNfTUFYPT0wXTogI3VuZGVmIE5HUk9VUFNfTUFYLgoKCSogY29tcGF0TWFrZWZpbGUgKENGTEFHUywgTERGTEFHUyk6IFNldCB0byBAQ0ZMQUdTQC9ATERGTEFHU0AuCgkqIGJ1aWxkLnRlbXBsYXRlIChDRkxBR1MsIExERkxBR1MpOiBTYW1lIGhlcmUuCgkqIGNvbmZpZ3VyZS5pbjogQUNfU1VCU1QoQ0ZMQUdTKSBhbmQgTERGTEFHUy4KCVNldCB0aGVtIHRvIC1nIGlmIG5vdCBkZWZpbmVkIGluIHRoZSBlbnZpcm9ubWVudC4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFVzZSBMSUJOQU1FIGNvbnNpc3RlbnRseSwgc2V0dGluZyBpdAoJb25seSBvbmNlLCB0byBiZSB0aGUgcGFzc2VkIG5hbWUgc2FucyBgLWwnLgoJUGFzcyBuZXcgdmFyIEZJTEUgdG8gYmUgbW9kaWZpZWQgYnkgdnBhdGhfc2VhcmNoLgoKTW9uIEphbiAxOCAxNDo1Mzo1NCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjMwLgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9icyk6IFJldHVybiB3aGVuIGpvYl9zbG90c191c2VkIGlzIGVxdWFsIHRvCglqb2Jfc2xvdHMuCgoJKiBjb25maWd1cmUuaW46IEFkZCBBQ19DT05TVCBmb3IgdGhlIHNha2Ugb2YgZ2V0b3B0LgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ29udGludWUgYWZ0ZXIgcGFyc2luZyBgb3ZlcnJpZGUnCglkaXJlY3RpdmUsIHJhdGhlciB0aGFuIGZhbGxpbmcgdGhyb3VnaCB0byBsb3NzYWdlLgoJQ2hlY2sgZm9yIEVPTCBvciBibGFuayBhZnRlciAib3ZlcnJpZGUgZGVmaW5lIi4KCgkqIGNvbXBhdE1ha2VmaWxlICguYy5vLCByZW1vdGUubyk6IFB1dCAkKENGTEFHUykgYWZ0ZXIgb3RoZXIgc3dpdGNoZXMuCgpGcmkgSmFuIDE1IDEyOjUyOjUyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjkuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBBZnRlciB3cml0aW5nIGV2ZXJ5dGhpbmcgaW50bwoJRkxBR1NUUklORywgb25seSBiYWNrIHVwIHR3byBjaGFycyBpZiBbLTFdIGlzIGEgZGFzaCwgbWVhbmluZyB3ZQoJanVzdCB3cm90ZSAiIC0iLiAgQWx3YXlzIHRlcm1pbmF0ZSB0aGUgc3RyaW5nIGF0ICpQLgoKCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogV2hlbiBjb25zdHJ1Y3RpbmcgbmFtZXMgaW4gc3RkIGRpcnMsCgl1c2UgJigqTElCKVsyXSBmb3IgdGhlIHN0ZW0sIG5vdCBMSUJOQU1FICh3aGljaCBwb2ludHMgYXQgdGhlCglidWZmZXIgd2UgYXJlIHdyaXRpbmcgaW50byEpLgoKVGh1IEphbiAxNCAxMzo1MDowNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogU2V0IElOX0lHTk9SRURfREVGSU5FIGZvciAib3ZlcnJpZGUKCWRlZmluZSIgd2hlbiBJR05PUklORyBpcyB0cnVlLgoKCSogY29tcGF0TWFrZWZpbGUgKGRpc3RjbGVhbik6IFJlbW92ZSBjb25maWcuc3RhdHVzIGFuZCBidWlsZC5zaC4KCldlZCBKYW4gMTMgMTY6MDE6MTIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yOC4KCgkqIG1pc2MuYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBDYXN0IHJlc3VsdCBvZiBtYWxsb2MvcmVhbGxvYyB0bwoJKGNoYXIgKikuCgoJKiBhcnNjYW4uYyAoYXJfc2NhbikgW0FJQU1BR106IENhc3QgcmVhZCBhcmcgdG8gKGNoYXIgKikuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IE92ZXJyaWRlIFNIRUxMIHZhbHVlIGZvcgoJb3JpZ2luIG9fZW52X292ZXJyaWRlIGFzIHdlbGwgYXMgb19lbnYuCgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBEb24ndCByZXBsYWNlICVnbG9ib2JqcyUuICBJbnN0ZWFkLAoJYWRkIHRoZSBuYW1lcyBvZiB0aGUgZ2xvYiBvYmplY3RzICh3L3N1YmRpcikgdG8gJW9ianMlLgoJKiBidWlsZC50ZW1wbGF0ZSAoZ2xvYm9ianMpOiBSZW1vdmVkLgoJVGFrZSBiYXNlbmFtZSBvZiAkb2JqcyBiZWZvcmUgbGlua2luZy4KClR1ZSBKYW4gMTIgMTI6MzE6MDYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjcuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IEFsc28gZWRpdCBidWlsZC5zaC4KCSogYnVpbGQudGVtcGxhdGU6IE5ldyBmaWxlLgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBOZXcgcnVsZSB0byBjcmVhdGUgaXQgZnJvbSBidWlsZC50ZW1wbGF0ZS4KCShtYWtlLSQodmVyc2lvbikudGFyLlopOiBEZXBlbmQgb24gYnVpbGQuc2guaW4uCgoJKiBtYWluLmMgKGRpZSk6IENhbGwgcHJpbnRfZGF0YV9iYXNlIGlmIC1wLgoJKG1haW4pOiBEb24ndCBjYWxsIGl0IGhlcmUuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGVmaW5lcyk6IEFkZCBAREVGU0AuICBjb25maWd1cmUgc2hvdWxkIHR1cm4gdGhpcwoJaW50byAtREhBVkVfQ09ORklHX0guCgpNb24gSmFuIDExIDE0OjM5OjIzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI2LgoKCSogbWlzYy5jIChpbml0X2FjY2Vzcyk6IFN1cnJvdW5kIHdpdGggI2lmZGVmIEdFVExPQURBVkdfUFJJVklMRUdFRC4KCSh7bWFrZSx1c2VyLGNoaWxkfV9hY2Nlc3MpIFshIEdFVExPQURBVkdfUFJJVklMRUdFRF06IE1ha2Ugbm8tb3AuCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsX3NldGdpZCk6IE5ldyB2YXIsIHNldCBieSBjb25maWd1cmUuCgkoaW5zdGFsbCk6IEluc3RhbGwgc2V0Z2lkICQoZ3JvdXApIG9ubHkgaWYgJChpbnN0YWxsX3NldGdpZCkgaXMgdHJ1ZS4KCkZyaSBKYW4gIDggMTU6MzE6NTUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChsb2FkX3Rvb19oaWdoKTogSWYgZ2V0bG9hZGF2ZyBmYWlscyB3aXRoIGVycm5vPT0wLCBnaXZlIGEKCW1lc3NhZ2Ugc2F5aW5nIHRoYXQgbG9hZCBsaW1pdHMgYXJlIG5vdCBzdXBwb3J0ZWQuCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IFJld3JvdGUgcGF0aCBkZWxldGlvbiBjb2RlIHRvCglub3QgdHJ5IHRvIHVzZSBQQVRIJ3MgbmV4dCBsaW5rIGFmdGVyIGZyZWVpbmcgUEFUSC4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFJld3JpdHRlbjsgbm93IGhhbmRsZXMgc3RyaW5nLXZhbHVlZAoJb3B0aW9uLCBhbmQgaGFzIG5vIGFyYml0cmFyeSBsaW1pdHMuCgkoc3dpdGNoZXMpOiBTZXQgYHRvZW52JyBmbGFnIGZvciAtSSBhbmQgLXYuCgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBDYXN0IHJldHVybiB2YWx1ZSBvZiBhbGxvY2EgdG8gY2hhciAqLgoKCSogbWlzYy5jIChjaGlsZF9hY2Nlc3MpIFtIQVZFX1NFVFJFVUlELCBIQVZFX1NFVFJFR0lEXTogVXNlCglzZXRyZVtndV1pZCBpbiBwbGFjZSBvZiBzZXRbZ3VdaWQuCgpXZWQgSmFuICA2IDE1OjA2OjEyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBEZWZpbmUgTUFLRU9WRVJSSURFUywgTUFLRSwgYW5kIE1BS0VfQ09NTUFORCB3aXRoCglvcmlnaW4gb19kZWZhdWx0LgoKCSogbWFrZS5oIFtQT1NJWF06IERvbid0IHRlc3QgdGhpcyB0byB1c2UgQU5TSV9TVFJJTkcuCglUZXN0aW5nIFNURENfSEVBREVSUyBzaG91bGQgYmUgc3VmZmljaWVudC4KCgkqIGpvYi5oOiBEZWNsYXJlIHN0YXJ0X3dhaXRpbmdfam9icy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEFkZCBtaXNzaW5nIHBhcmVucyBpbiBpZiBzdG10IHRoYXQgZmluZAoJY29uZGl0aW9uYWwgZGlyZWN0aXZlcy4KCgkqIG1haW4uYyAobWFpbik6IERlY2xhcmUgaW5pdF9kaXIuCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogQWx3YXlzIHVzZSB0d28gJSBzcGVjcyBpbiBhCglERUJVR1AyLCBhbmQgYWx3YXlzIHBhc3MgdHdvIG5vbi1uaWwgYXJncy4KCUNhc3QgZmllbGQgd2lkdGggYXJncyB0byBpbnQuCglBZGQgbWlzc2luZyBwYXJlbnMgaW4gIVJVTEUtPnN1YmRpciBpZiBzdG10LgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24sIHBhdHN1YnN0X2V4cGFuZCk6IEFkZCBwYXJlbnMgYXJvdW5kCglhc3NpZ25tZW50cyBpbnNpZGUgYHdoaWxlJyBzdG10cy4KCSogY29tbWFuZHMuYyAocHJpbnRfY29tbWFuZHMpOiBDYXN0IGZpZWxkIHdpZHRoIGFyZ3MgdG8gaW50LgoKCSogcmVhZC5jIChkb19kZWZpbmUpOiBDYXN0IHJldHVybiB2YWx1ZSBvZiBhbGxvY2EgdG8gKGNoYXIgKikuCgoJKiBtYWluLmMgKGluaXRfc3dpdGNoZXMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgZGVjb2RlX3N3aXRjaGVzLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFRha2UgbmV3IGFyZyBFTlYuICBJZiBzZXQsIGlnbm9yZSBub24tb3B0aW9uCglhcmdzOyBwcmludCBubyBlcnJvciBtc2dzOyBpZ25vcmUgb3B0aW9ucyB3aXRoIGNsZWFyIGBlbnYnIGZsYWdzLgoJKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBSZXdyaXR0ZW4gdG8gY2hvcCBlbnZhciB2YWx1ZSBpbnRvIHdvcmRzCglhbmQgcGFzcyB0aGVtIHRvIGRlY29kZV9zd2l0Y2hlcy4KCShzd2l0Y2hlcyk6IFNldCBgZW52JyBmbGFnIGZvciAtSSBhbmQgLXYuCgoJKiBkaXIuYyAoaW5pdF9kaXIpOiBDYXN0IGZyZWUgdG8gX19nbG9iX2Nsb3NlZGlyX2hvb2sncyB0eXBlLgoKVHVlIEphbiAgNSAxNDo1MjoxNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI1LgoKCSogam9iLmMgW0hBVkVfU1lTX1dBSVQgfHwgIVVTR106IERvbid0ICNpbmNsdWRlIDxzeXMvdGltZS5oPiBhbmQKCTxzeXMvcmVzb3VyY2UuaD4uICA8c3lzL3RpbWUuaD4gaW50ZXJhY3RzIGJhZGx5IHdpdGggPHRpbWUuaD4sIGFuZAoJd2UgZG9uJ3QgbmVlZCB0aGVzZSBhbnl3YXkuCgoJKiBjb25maWd1cmUuaW4gKEFDX0hBVkVfRlVOQ1MpOiBDaGVjayBmb3Igc2V0cmVbZ3VdaWQuCgkqIG1pc2MuYyAoe3VzZXIsbWFrZX1fYWNjZXNzKTogVGVzdCAjaWZuZGVmIEhBVkVfU0VUUkVbR1VdSUQsIG5vdAoJI2lmZGVmIFBPU0lYIHx8IFVTRy4gIFN1bk9TIDQuMSBpcyBzdXBwb3NlZGx5IFBPU0lYLjEgY29tcGxpYW50LAoJYnV0IGl0cyBzZXRbZ3VdaWQgZnVuY3Rpb25zIGFyZW4ndDsgaXRzIHNldHJlW2d1XWlkIGZ1bmN0aW9ucyB3b3JrLgoKCSogbWlzYy5jICh7dXNlcixtYWtlLGNoaWxkfV9hY2Nlc3MpOiBHaXZlIG5hbWUgb2YgY2FsbGVyIGluIGVycm9yIG1zZ3MuCgoJKiBqb2IuYyAobG9hZF90b29faGlnaCk6IFNheSAiY2Fubm90IGVuZm9yY2UgbG9hZCBsaW1pdCIgaW4gZXJyb3IgbXNnLgoKCSogY29uZmlndXJlLmluOiBDYWxsIEFDX1BST0dfQ0MuCgkqIGNvbXBhdE1ha2VmaWxlIChDQyk6IERlZmluZSB0byBAQ0NAIChhdXRvY29uZiBtYWdpYykuCgoJKiBjb21wYXRNYWtlZmlsZTogQWRkIC5OT0VYUE9SVCBtYWdpYyB0YXJnZXQuCgpNb24gSmFuICA0IDE3OjAwOjAzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogVXBkYXRlZCBjb3B5cmlnaHQgdG8gaW5jbHVkZSA5My4KClRodSBEZWMgMzEgMTI6MjY6MTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW19BSVhdOiBEb24ndCBkZWNsYXJlIGFsbG9jYS4KClR1ZSBEZWMgMjkgMTM6NDU6MTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjQuCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEFkZCBzaWduYW1lLm8uCgkoc3Jjcyk6IEFkZCBzaWduYW1lLltjaF0uCgoJKiBjb21wYXRNYWtlZmlsZSAoc3Jjcyk6IEFkZCBjb25maWcuaC5pbi4KCShyZW1vdGUubyk6IEFkZCAtSS4gYmVmb3JlIC1JJChzcmNkaXIpLgoKTW9uIERlYyAyOCAxNTo1MToyNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIzLgoKCSogcmVhZC5jIChyZWFkbGluZSk6IEZhdGFsIHdoZW4gTEVOPT0wLCBpbmRpY2F0aW5nIGEgbGluZSBzdGFydGluZwoJd2l0aCBhIE5VTC4KCShyZWFkbGluZSk6IFRha2UgbmV3IGFyZyBMSU5FTk8sIGZvciB1c2UgaW4gZXJyb3IgbXNnLgoJKHJlYWRfbWFrZWZpbGUsIGRvX2RlZmluZSk6IFBhc3MgaXQuCgoJKiBjb21wYXRNYWtlZmlsZSAoZ2xvYi9saWJnbG9iLmEpOiBQYXNzIC1ESEFWRV9DT05GSUdfSCBpbiBDUFBGTEFHUy4KCSguYy5vKTogQWRkIC1JLiBiZWZvcmUgLUkkKHNyY2RpcikuCgpXZWQgRGVjIDIzIDEyOjEyOjA0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBY2NlcHQgYW5kIGlnbm9yZSBhIHJ1bGUgd2l0aCBubyB0YXJnZXRzLgoKCSogY29tcGF0TWFrZWZpbGUgKEFMTE9DQV9TUkMpOiBOZXcgdmFyaWFibGUuCgkoc3Jjcyk6IEluY2x1ZGUgaXRzIHZhbHVlLgoKCSogcmVhZC5jIChzdHJ1Y3QgY29uZGl0aW9uYWwpOiBSZW5hbWVkIG1lbWJlciBgbWF4X2lnbm9yaW5nJyB0bwoJYGFsbG9jYXRlZCc7IGFkZGVkIG5ldyBtZW1iZXIgYHNlZW5fZWxzZScuCgkoY29uZGl0aW9uYWxfbGluZSk6IEluaXRpYWxpemUgc2Vlbl9lbHNlIGZsYWcgd2hlbiBzdGFydGluZyBhbiBgaWYuLi4nOwoJc2V0IGl0IHdoZW4gd2Ugc2VlIGFuIGBlbHNlJzsgZmF0YWwgaWYgc2V0IHdoZW4gd2Ugc2VlIGBlbHNlJy4KCShyZWFkX21ha2VmaWxlKTogRmF0YWwgIm1pc3NpbmcgYGVuZGlmJyIgaWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nCgljb25kaXRpb25hbHMsIG5vdCBqdXN0IGlmIHdlIGFyZSBzdGlsbCBpZ25vcmluZy4KClR1ZSBEZWMgMjIgMTU6MzY6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChtYW5leHQpOiBTZXQgdG8gMSwgbm90IGwuCgkoJChtYW5kaXIpLyQoaW5zdG5hbWUpLiQobWFuZXh0KSk6IFVzZSAkKHNyY2RpcikgZm9yIG1ha2UubWFuIGluIGNtZHMuCgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IERvbid0IGNhbGwgdW5pcXVpemVfZGVwcyBoZXJlLgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IExpa2V3aXNlLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IExpa2V3aXNlLgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBDYWxsIGl0IG9ubHkgaGVyZS4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtfX2NvbnZleF9fXTogRkM9ZmMuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBFeHBhbmQgdGhlIHZhbHVlcyBvZiByZWN1cnNpdmVseQoJZXhwYW5kZWQgdmFyaWFibGVzIHdoZW4gcHV0dGluZyB0aGVtIGludG8gdGhlIGVudmlyb25tZW50LgoJKiBleHBhbmQuYyAocmVjdXJzaXZlbHlfZXhwYW5kKTogTWFkZSBnbG9iYWwuCgkqIG1ha2UuaCAocmVjdXJzaXZlbHlfZXhwYW5kKTogRGVjbGFyZSBpdC4KCgkqIHJlbWFrZS5jIChjaGVja19kZXApOiBTZXQgRklMRS0+Y29tbWFuZF9zdGF0ZSB0byBjc19kZXBzX3J1bm5pbmcKCXdoZW4gYSBkZXAncyBjb21tYW5kX3N0YXRlIGlzIGNzX3J1bm5pbmcgb3IgY3NfZGVwc19ydW5uaW5nLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2hhbmdlZCBlcnJvciBtc2cgZm9yIHNwdXJpb3VzIGNtZHMgdG8KCW5vdCBzYXkgImZpcnN0IHRhcmdldCIuCgpTdW4gRGVjIDIwIDE3OjU2OjA5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogRG8gQUNfQ09ORklHX0hFQURFUiByaWdodCBhZnRlciBBQ19JTklULgoJKiBtYWtlLmggKEhBVkVfQ09ORklHX0gpOiAjaW5jbHVkZSAiY29uZmlnLmgiLCB0aGVuICNkZWZpbmUgdGhpcy4KCSogY29tcGF0TWFrZWZpbGUgKGNvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZy5oLmluKTogTmV3IHJ1bGVzLgoJKGRlZmluZXMpOiBSZW1vdmVkIEBERUZTQC4KClRodSBEZWMgMTcgMTY6MTE6NDAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChyZWFsY2xlYW4pOiBKdXN0IGRlcGVuZCBvbiBkaXN0Y2xlYW47IG5vIGNtZHMuCgkoZGlzdGNsZWFuKTogRG8gd2hhdCByZWFsY2xlYW4gZGlkIGJlZm9yZTsgYWxzbyByZW1vdmUgTWFrZWZpbGUgYW5kCgljb25maWcuaDsgZG9uJ3QgcmVtb3ZlIGNvbmZpZ3VyZS4KCShpbmZvLCBkdmkpOiBOZXcgdGFyZ2V0czsgZGVwZW5kIG9uIG1ha2Uue2luZm8sZHZpfS4KCShkb2MpOiBSZW1vdmVkIHRhcmdldC4KCShNQUtFSU5GTywgVEVYSTJEVkkpOiBOZXcgdmFycy4KCShtYWtlLmluZm8sIG1ha2UuZHZpKTogVXNlIHRoZW0gaW5zdGVhZCBvZiBleHBsaWNpdCBjbWRzLgoKV2VkIERlYyAxNiAxNjoyNToyNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBBZGRlZCBmY250bC5oIHRvIEFDX0hBVkVfSEVBREVSUy4gIGdldGxvYWRhdmcgY2FyZXMuCgpXZWQgRGVjICA5IDE1OjIxOjAxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChsb25nX29wdGlvbl9hbGlhc2VzKTogQWRkIC0tbmV3LWZpbGUgYWxpYXMgZm9yIC1XLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcyk6IENoYW5nZSBhbGwgQysrIHRvIENYWCBhbmQgQysrRkxBR1MKCXRvIENYWEZMQUdTLgoKCSogcmVhZC5jIChkb19kZWZpbmUpOiBFeHBhbmQgdGhlIHZhcmlhYmxlIG5hbWUgYmVmb3JlIHVzaW5nIGl0LgoKCSogbWFpbi5jIChtYWluKTogRGVmaW5lIHZhcmlhYmxlICJNQUtFX0NPTU1BTkQiIHRvIGFyZ3ZbMF07CglkZWZpbmUgIk1BS0U9JChNQUtFX0NPTU1BTkQpICQoTUFLRU9WRVJSSURFUykiIGFsd2F5cy4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFNlYXJjaCBmb3IgbGliTkFNRS5hIGluIGN3ZDsgbG9vayBpbgoJdnBhdGggYmVmb3JlIGxvb2tpbmcgaW4gc3RhbmRhcmQgZGlycywgbm90IGFmdGVyLgoJQ2hhbmdlZCBvcmRlciBvZiBzdGQgZGlycyB0bzogL2xpYiwgL3Vzci9saWIsICR7cHJlZml4fS9saWIuCgpNb24gTm92IDIzIDE0OjU3OjM0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfcGF0dGVybl9ydWxlcywgZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IEFkZGVkCglicmFja2V0cyBhcm91bmQgaW5pdGlhbGl6ZXJzLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBEb24ndCBjaGVjayBmb3IgTElORVswXT09J1x0Jy4KCSh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IEV4cGFuZCB0aGUgbmFtZSBiZWZvcmUgZGVmaW5pbmcgdGhlIHZhci4KCgkqIGpvYi5jIChpbml0X3NpZ2xpc3QpOiBSZW1vdmVkIGZ1bmN0aW9uLgoJUmVtb3ZlZCBkZWNsIG9mIGBzeXNfc2lnbGlzdCcuCgkqIG1ha2UuaCBbISBIQVZFX1NZU19TSUdMSVNUXTogI2luY2x1ZGUgInNpZ25hbWUuaCIuCglbSEFWRV9TWVNfU0lHTElTVCAmJiAhU1lTX1NJR0xJU1RfREVDTEFSRURdOiBEZWNsYXJlIHN5c19zaWdsaXN0Cglvbmx5IHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMuCgkqIG1haW4uYyAobWFpbik6IERvbid0IGRlY2xhcmUgaW5pdF9zaWdsaXN0LgoJKG1haW4pIFshIEhBVkVfU1lTX1NJR0xJU1RdOiBDYWxsIHNpZ25hbWVfaW5pdCBpbnN0ZWFkIG9mIGluaXRfc2lnbGlzdC4KCldlZCBOb3YgMTggMTQ6NTI6NTEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogRG9uJ3QgdHJ5IHRvIGFwcGVuZCB0byBGSVJTVERFUFMgaWYgaXQncwoJbmlsOyBpbnN0ZWFkIGp1c3Qgc2V0IGl0IHRvIE1PUkVERVBTLgoKTW9uIE5vdiAxNiAxNzo0OToxNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBJbml0aWFsaXplIFAgdG8gRElSUEFUSCBiZWZvcmUKCWxvb3AgdGhhdCBzZXRzIE1BWEVMRU0uCgpGcmkgTm92IDEzIDE4OjIzOjE4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjIuCgpUaHUgTm92IDEyIDE1OjQ1OjMxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBVbmRlciAtbiwgaW5jcmVtZW50IGZpbGVzX3JlbWFkZSBhZnRlcgoJcHJvY2Vzc2luZyAoaS5lLiwgcHJpbnRpbmcpIGFsbCBjb21tYW5kIGxpbmVzLgoKVHVlIE5vdiAxMCAxNTozMzo1MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogQXBwZW5kIG5ldyBkZXBzIGlmIHRoaXMgcnVsZSBoYXMgbm8KCWNvbW1hbmRzOyBwcmVwZW5kIHRoZW0gdG8gZXhpc3RpbmcgZGVwcyBpZiB0aGlzIHJ1bGUgaGFzIG5vIGNvbW1hbmRzLgoKCSogZGlyLmMgKG9wZW5fZGlyc3RyZWFtKTogUmV0dXJuIG5pbCBpZiBESVItPmNvbnRlbnRzLT5maWxlcyBpcyBuaWwuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogUmVtb3ZlZCBsYXN0IGFyZyBTVFJJUC4gIEFsd2F5cyBzdHJpcCBgLi8ncy4KCShyZWFkX21ha2VmaWxlKTogQ2hhbmdlZCBjYWxsZXJzLgoJKiBmdW5jdGlvbi5jIChzdHJpbmdfZ2xvYik6IExpa2V3aXNlLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogTGlrZXdpc2UuCgpNb24gTm92ICA5IDE3OjUwOjE2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAoZmlsZXNfcmVtYWRlKTogTWFkZSBnbG9iYWwuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBEb24ndCBpbmNyZW1lbnQgZmlsZXNfcmVtYWRlIGhlcmU7IHRoaXMKCWZ1bmN0aW9uIGdldHMgY2FsbGVkIGluIG1hbnkgc2l0dWF0aW9ucyB3aGVyZSBubyByZW1ha2luZyB3YXMgaW4KCWZhY3QgZG9uZS4KCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEbyBpdCBoZXJlIGluc3RlYWQsIHdoZW4gd2Uga25vdyB0aGF0CglhY3R1YWwgY29tbWFuZHMgaGF2ZSBiZWVuIHJ1biBmb3IgdGhlIGZpbGUuCgkqIG1ha2UuaCAoZmlsZXNfcmVtYWRlKTogRGVjbGFyZSBpdC4KClRodSBOb3YgIDUgMTg6MjY6MTAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IEFsbG93IGJsYW5rcyBhcyB3ZWxsIGFzIGNvbG9ucyB0bwoJc2VwYXJhdGUgZWx0cyBpbiB0aGUgc2VhcmNoIHBhdGguCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBEb24ndCBmYXRhbCBvbiBleHRyYSB0b2tlbnMgaW4gYHZwYXRoJy4KCVRoZSBzZWFyY2ggcGF0aCBjYW4gY29udGFpbiBzcGFjZXMgbm93LgoKVHVlIE5vdiAgMyAyMDo0NDozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChjaGVjayk6IE5ldyB0YXJnZXQ7IG5vLW9wLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBNb2QgT0xESEFTSCBieSBGSUxFX0JVQ0tFVFMgYWZ0ZXIKCXRlc3RpbmcgZm9yIE9MREhBU0g9PTAgYnV0IGJlZm9yZSB1c2luZyB0aGUgdmFsdWUuCgkocmVuYW1lX2ZpbGUpOiBEb24ndCBtb2QgT0xESEFTSCBieSBGSUxFX0JVQ0tFVFMgYmVmb3JlIHBhc3NpbmcgaXQKCXRvIGZpbGVfaGFzaF9lbnRlci4KCgkqIGZpbGUuYyAocmVuYW1lX2ZpbGUpOiBOb3RpY2Ugd2hlbiBPTERGSUxFLT5jbWRzIGNhbWUgZnJvbQoJZGVmYXVsdC5jLCBhbmQgZG9uJ3QgdHJ5IHRvIHByaW50IC0+ZmlsZW5hbWUgaW4gdGhhdCBjYXNlLgoKU3VuIE9jdCAyNSAwMTo0ODoyMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogRG9uJ3QgcHJvY2VzcyBGLT5hbHNvX21ha2UgaGVyZS4KCShub3RpY2VfZmluaXNoZWRfZmlsZSk6IERvbid0IHByb2Nlc3MgRklMRS0+YWxzb19tYWtlIGlmIG5vIGF0dGVtcHQKCXRvIHVwZGF0ZSBGSUxFIHdhcyBhY3R1YWxseSBtYWRlLgoJRml4ZWQgdG8gY2FsbCBmX210aW1lIGRpcmVjdGx5IHRvIHJlZnJlc2ggdGhlaXIgbW9kdGltZXMuCgpTYXQgT2N0IDI0IDIyOjA4OjU5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKGZpbmRfcGVyY2VudCk6IERvbid0IGluY3JlbWVudCBQIGFnYWluIGFmdGVyIHNraXBwaW5nCglhbiBlc2NhcGVkICUuCgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kKTogSW4gY2FsbCB0byBwYXRzdWJzdF9leHBhbmQsIGRvbid0CglmaW5kIGAlJ3Mgb3Vyc2VsdmVzOyBsZXQgdGhhdCBmdW5jdGlvbiBkbyBpdC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZTogcmVjb3JkX3dhaXRpbmdfZmlsZXMpOiBEb24ndCBjYWxsCglyZWNvcmRfZmlsZXMgaWYgRklMRU5BTUVTIGlzIG5pbC4KCShyZWFkX21ha2VmaWxlKTogQWxsIGFsdGVybmF0aXZlcyBpbiB0aGUgcGFyc2luZywgZXhjZXB0IGZvciBydWxlCglsaW5lcywgZmFsbCB0aHJvdWdoIHRvIHRoZSBlbmQgb2YgdGhlIGxvb3AuICBBdCB0aGUgZW5kIG9mIHRoZQoJbG9vcCwgZG8gcmVjb3JkX3dhaXRpbmdfZmlsZXMgc28gd2Ugbm90aWNlIGxhdGVyIHNwdXJpb3VzIGNtZHMuCgpGcmkgT2N0IDIzIDE1OjU3OjM3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEZyZWUgb2xkIHZhbHVlIG9mIFNIRUxMCgliZWZvcmUgcmVwbGFjaW5nIGl0LgoKVGh1IE9jdCAxNSAxODo1Nzo1NiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlICguYy5vKTogQWRkIC1JJChzcmNkaXIpL2dsb2IgdG8gZmxhZ3MuCgoJKiBkaXIuYyAob3Blbl9kaXJzdHJlYW0pOiBDYXN0IHJldHVybiB2YWx1ZSB0byBfX3B0cl90LgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlczogIkdFVCIpIFtfSUJNUjJdOiBVc2UgVVNHIGRlZm4uCgoJKiBtYWtlLmggKE1BWFBBVEhMRU4pOiBNb3ZlZCBvdXQgb2YgI2lmbmRlZiBQT1NJWC4KCShHRVRfUEFUSF9NQVgpOiBNb3ZlZCBmcm9tICNpZmRlZiBQT1NJWCB0byAjaWZkZWYgUEFUSF9NQVggI2Vsc2UuCglEZWZpbmUgYXMgKGdldF9wYXRoX21heCAoKSkuCglbISBQQVRIX01BWF0gKE5FRURfR0VUX1BBVEhfTUFYKTogRGVmaW5lLgoJWyEgUEFUSF9NQVhdIChnZXRfcGF0aF9tYXgpOiBEZWNsYXJlIGZuLgoJKiBtaXNjLmMgW05FRURfR0VUX1BBVEhfTUFYXSAoZ2V0X3BhdGhfbWF4KTogTmV3IGZ1bmN0aW9uLgoKTW9uIE9jdCAxMiAxMzozNDo0NSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yMS4KCgkqIGpvYi5jIChzeXNfc2lnbGlzdCk6IE9ubHkgZGVjbGFyZSAjaWZuZGVmIFNZU19TSUdMSVNUX0RFQ0xBUkVELgoJKiBtYWtlLmggWyEgSEFWRV9TWVNfU0lHTElTVCAmJiBIQVZFX19TWVNfU0lHTElTVF06ICNkZWZpbmUKCVNZU19TSUdMSVNUX0RFQ0xBUkVELgoKCSogZGlyLmMgKGZpbGVfaW1wb3NzaWJsZSk6IFdoZW4gaW5pdGlhbGl6aW5nIERJUi0+Y29udGVudHMsIHNldAoJRElSLT5jb250ZW50cy0+ZGlyc3RyZWFtIHRvIG5pbC4KCgkqIGNvbXBhdE1ha2VmaWxlIChHTE9CKTogRGVmaW5lIG5ldyB2YXJpYWJsZS4KCShvYmpzKTogVXNlIGl0LCByYXRoZXIgdGhhbiBnbG9iL2xpYmdsb2IuYSBleHBsaWNpdGx5LgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFdoZW4gc3RyaXBwaW5nICIuLyIsIGhhbmRsZSBjYXNlcyBsaWtlCgkiLi8vL2ZvbyIgYW5kICIuLy8vLy8iLgoJKiBmaWxlLmMgKGxvb2t1cF9maWxlLCBlbnRlcl9maWxlKTogTGlrZXdpc2UuCgpTdW4gT2N0IDExIDE3OjAwOjM1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkaXIuYyAoc3RydWN0IGRpcnN0cmVhbSwge29wZW4scmVhZH1fZGlyc3RyZWFtKTogTmV3CglkYXRhIHR5cGUgYW5kIGZ1bmN0aW9ucyB0byByZWFkIGEgZGlyZWN0b3J5IHNlcXVlbnRpYWxseS4KCShpbml0X2Rpcik6IE5ldyBmdW5jdGlvbiB0byBob29rIGl0IGludG8gZ2xvYi4KCSogbWFpbi5jIChtYWluKTogQ2FsbCBpbml0X2Rpci4KCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogQWRkZWQgZ2xvYi9saWJnbG9iLmEuCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGNvZGUgdG8gdGVzdCBmb3IgZ2xvYi4KCkZyaSBPY3QgIDkgMTI6MDg6MzAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogR2VuZXJhbGl6ZWQgdGVzdCBmb3IgTkFNRSBwb2ludGluZwoJc29tZXdoZXJlIGludG8gRi0+bmFtZS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV92YXJpYWJsZV9pbl9zZXQpOiBGcmVlIG9sZCB2YWx1ZSB3aGVuIHJlcGxhY2luZy4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogRnJlZSB0aGUgbGluZWJ1ZmZlciBiZWZvcmUgcmV0dXJuaW5nLgoJKHJlY29yZF9maWxlcyk6IFdoZW4gY2xlYXJpbmcgLlNVRkZJWEVTIGRlcHMsIGZyZWUgdGhlaXIgZGF0YS4KCShtdWx0aV9nbG9iKTogRnJlZSBPTEQgYW5kIGl0cyBkYXRhIHdoZW4gcmVwbGFjaW5nIGl0IHdpdGggcmVzdWx0cwoJb2YgZ2xvYiBydW4uCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBVc2UgYWxsb2NhIGluIHBsYWNlIG9mIHhtYWxsb2MKCWZvciB0ZW1wIHNwYWNlIGZvciAkXiwgJD8sIGV0IGFsLgoKCSogZGlyLmMgKHN0cnVjdCBkaXJlY3RvcnkpOiBOZXcgbWVtYmVyIGBjb250ZW50cycgcmVwbGFjZXMgYGZpbGVzJwoJYW5kIGBkaXJzdHJlYW0nLgoJKHN0cnVjdCBkaXJlY3RvcnlfY29udGVudHMpOiBOZXcgdHlwZS4KCShkaXJlY3Rvcmllc19jb250ZW50cyk6IE5ldyBoYXNoIHRhYmxlLgoJKGRpcl9zdHJ1Y3RfZmlsZV9leGlzdHNfcCk6IFRha2UgYSBzdHJ1Y3QgZGlyZWN0b3J5X2NvbnRlbnRzLgoJKGRpcl9maWxlX2V4aXN0c19wKTogUGFzcyBpdCB0aGUgYGNvbnRlbnRzJyBtZW1iZXIgb2YgdGhlIGRpciBmb3VuZC4KCShkaXJfc3RydWN0X2ZpbGVfZXhpc3RzX3ApOiBSZW5hbWVkIHRvIGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wOwoJbWFkZSBzdGF0aWMuICBSZXR1cm4gMCBpZiBESVIgaXMgbmlsIChtZWFuaW5nIGl0IGNvdWxkbid0IGJlIHN0YXQnZCkuCgkoZGlyX2ZpbGVfZXhpc3RzX3AsIGZpbmRfZGlyZWN0b3J5KTogQ2hhbmdlIGFsbCBjYWxsZXJzLgoJKGZpbGVfaW1wb3NzaWJsZSk6IFVzZSBESVItPmNvbnRlbnRzLCBpbml0aWFsaXppbmcgaXQgaWYgbmlsLgoJKHByaW50X2Rpcl9kYXRhX2Jhc2UpOiBVc2UgRElSLT5jb250ZW50cywgYW5kIHByaW50IG91dCBkZXZpY2UgYW5kCglpbm9kZSBudW1iZXJzIHdpdGggZWFjaCBkaXJlY3RvcnkuCgoJKiBDaGFuZ2VzIGZvciBwZXJmb3JtYW5jZSB3aW4gZnJvbSBKb2huIEdpbG1vcmUgPGdudUBjeWdudXMuY29tPjoKCSogZGlyLmMgKERJUkVDVE9SWV9CVUNLRVRTKTogSW5jcmVhc2UgdG8gMTk5LgoJKERJUkZJTEVfQlVDS0VUUyk6IERlY3JlYXNlIHRvIDEwNy4KCShmaW5kX2RpcmVjdG9yeSk6IEFsbG9jYXRlIGFuZCB6ZXJvIGEgbXVsdGlwbGUgb2YKCXNpemVvZiAoc3RydWN0IGRpcmZpbGUgKiksIG5vdCBvZiBzaXplb2YgKHN0cnVjdCBkaXJmaWxlKS4KCShkaXJfc3RydWN0X2ZpbGVfZXhpc3RzX3ApOiBOZXcgZnVuY3Rpb24sIG5lYXJseSBhbGwgY29kZSBmcm9tCglkaXJfZmlsZV9leGlzdHNfcC4KCShkaXJfZmlsZV9leGlzdHNfcCk6IEp1c3QgY2FsbCBmaW5kX2RpcmVjdG9yeStkaXJfc3RydWN0X2ZpbGVfZXhpc3RzX3AuCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBSZW1vdmUgcmVkdW5kYW50CglkaXJfZmlsZV9leGlzdHNfcCBjYWxsLgoKCSogY29uZmlndXJlLmluOiBDb21tZW50IG91dCBnbG9iIGNoZWNrOyBhbHdheXMgdXNlIG91ciBjb2RlLgoKRnJpIE9jdCAgMiAxOTo0MToyMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbISBIQVZFX1NZU19TSUdMSVNUICYmIEhBVkVfX1NZU19TSUdMSVNUXTogI2RlZmluZQoJSEFWRV9TWVNfU0lHTElTVDsgYWZ0ZXIgZG9pbmcgI2RlZmluZSBzeXNfc2lnbGlzdCBfc3lzX3NpZ2xpc3QsIHdlCglkbyBoYXZlIGl0LgoKV2VkIFNlcCAzMCAxOToyMTowMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IERvbid0IGRvIC13IGF1dG9tYXRpY2FsbHkgaWYgLXMuCgpUdWUgU2VwIDI5IDIxOjA3OjU1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChwcmludGVkX3ZlcnNpb24pOiBNb3ZlIHZhcmlhYmxlIGluc2lkZSBwcmludF92ZXJzaW9uLgoJKHByaW50X3ZlcnNpb24pOiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgcHJpbnRlZF92ZXJzaW9uIGlzIHNldC4KCShkaWUpOiBEb24ndCB0ZXN0IHByaW50ZWRfdmVyc2lvbiBoZXJlLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFVuZGVyIC12LCBkbyBwcmludF92ZXJzaW9uIGJlZm9yZSBnaXZpbmcgdXNhZ2UuCgkoREVTQ1JJUFRJT05fQ09MVU1OKTogTmV3IG1hY3JvLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFVzZSBpdCB3aGVuIHByaW50aW5nIHRoZSB1c2FnZSBtZXNzYWdlLgoJTGVhdmUgYXQgbGVhc3QgdHdvIHNwYWNlcyBiZXR3ZWVuIG9wdGlvbnMgYW5kIHRoZWlyIGRlc2NyaXB0aW9ucy4KCkZyaSBTZXAgMjUgMTM6MTI6NDIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjAuCgpXZWQgU2VwIDE2IDE2OjE1OjIyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogU2F2ZSBlcnJubyB2YWx1ZSBmcm9tIHRyeWluZyB0byBvcGVuCglGSUxFTkFNRSwgYW5kIHJlc3RvcmUgaXQgYmVmb3JlIGVycmluZzsgb3RoZXJ3aXNlIHdlIGdldCB0aGUgZXJybm8KCXZhbHVlIGZyb20gdGhlIGxhc3QgZWx0IG9mIHRoZSBzZWFyY2ggcGF0aC4KClR1ZSBTZXAgMTUgMTU6MTI6NDcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobG9uZ19vcHRpb25fYWxpYXNlcyk6IEFkZCAtLXN0b3AgZm9yIC1TLgoKCSogcmVhZC5jICh3b3JkMWVxKTogRG8gc3RybmNtcCBiZWZvcmUgZGVyZWZlcmVuY2luZyBzb21lcGxhY2UgdGhhdAoJbWF5IGJlIG91dCBpbiBzcGFjZS4KCldlZCBTZXAgIDkgMTU6NTA6NDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IElmIGFsbCB0aGUgY29tbWFuZCBsaW5lcyB3ZXJlCglyZWN1cnNpdmUsIGRvbid0IGRvIHRoZSB0b3VjaGluZy4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IERvbid0IGNoZWNrIGZvciArIGhlcmUuCgkqIGNvbW1hbmRzLmMgKGNob3BfY29tbWFuZHMpOiBEbyBpdCBoZXJlIGluc3RlYWQuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBQcmVwZW5kICsgdG8gY21kcyBmb3IgUkNTLgoKV2VkIFNlcCAgMiAxNzo1MzowOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogSW5jbHVkZSAkKEFMTE9DQSkuCgoJKiBtYWtlLmggW0NSQVldOiBNb3ZlICNkZWZpbmUgc2lnbmFsIGJzZHNpZ25hbCB0byBiZWZvcmUgI2luY2x1ZGVzLgoKVGh1IEF1ZyAyNyAxNzo0NTo0MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChkZWZhdWx0X2luY2x1ZGVfZGlyZWN0b3JpZXMpOiBBZGQgSU5DTFVERURJUiBmaXJzdC4KCSogY29tcGF0TWFrZWZpbGUgKGluY2x1ZGVkaXIpOiBEZWZpbmUuCgkoZGVmaW5lcyk6IEFkZCAtRCBmb3IgSU5DTFVERURJUj0iJChpbmNsdWRlZGlyKSIuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBHcm9rIG11bHRpcGxlIGZpbGVzIGluIGBpbmNsdWRlJzsKCWdsb2JiaW5nIHRvby4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IE5ldyBmdW5jdGlvbi4KCShsaWJyYXJ5X2ZpbGVfbXRpbWUpOiBSZW1vdmUgZnVuY3Rpb24uCgkoZl9tdGltZSk6IFVzZSBsaWJyYXJ5X3NlYXJjaCBpbnN0ZWFkIG9mIGxpYnJhcnlfZmlsZV9tdGltZS4KCSogY29tcGF0TWFrZWZpbGUgKGxpYmRpcik6IERlZmluZS4KCShkZWZpbmVzKTogQWRkIC1EIGZvciBMSUJESVI9IiQobGliZGlyKSIuCgkqIG1ha2UudGV4aW5mbyAoTGlicmFyaWVzL1NlYXJjaCk6IERvY3VtZW50IGNoYW5nZS4KCgkqIGZpbGUuYyAocmVuYW1lX2ZpbGUpOiBGaXggZmlsZV9oYXNoX2VudGVyIGNhbGwgd2l0aCBtaXNzaW5nIGFyZy4KCldlZCBBdWcgMjYgMTc6MTA6NDYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTkuCgoJKiBtYWluLmMgKG1haW4pOiBTZXQgY29tbWFuZF9zdGF0ZSB0byBjc19maW5pc2hlZCBmb3IgdGVtcCBmaWxlcwoJbWFkZSBmb3Igc3RkaW4gbWFrZWZpbGVzLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBEb24ndCB0ZWxsIGdldG9wdCB0byByZXR1cm4gbm9uLW9wdGlvbgoJYXJncyBpbiBvcmRlci4KCUlnbm9yZSBhbiBhcmd1bWVudCBvZiBgLScuCgpUaHUgQXVnIDIwIDEzOjM2OjA0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogSWYgKHRvdWNoX2ZsYWcgJiYgIVJFQ1VSU0lWRSksIGlnbm9yZQoJdGhlIGNvbW1hbmQgbGluZSBhbmQgZ28gdG8gdGhlIG5leHQuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBVbmRlciAtdCwgdG91Y2ggRklMRS4KCSogcmVtYWtlLmMgKHJlbWFrZV9maWxlKTogRG9uJ3QgdG91Y2ggaXQgaGVyZS4KCldlZCBBdWcgMTkgMTY6MDY6MDkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZ1bmN0aW9uLmMgKHBhdHRlcm5fbWF0Y2hlcyk6IFVzZSB0ZW1wb3JhcnkgZm9yIHN0cmxlbiAoV09SRCkKCWluc3RlYWQgb2YgdHdvIGZ1bmN0aW9uIGNhbGxzLgoKCSogY29tcGF0TWFrZWZpbGUgKExPQURfQVZHKTogUmVtb3ZlIHZhcmlhYmxlIGFuZCBjb21tZW50cy4KClR1ZSBBdWcgMTggMTQ6NTg6NTggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKFJ1bm5pbmcpOiBOb2RlIHJlbmFtZWQgdG8gYG1ha2UgSW52b2NhdGlvbicuCgpGcmkgQXVnIDE0IDEyOjI3OjEwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBhcnNjYW4uYyAoYXJfbmFtZV9lcXVhbCk6IERvbid0IGNvbXBhcmUgW01BWC0zLi5NQVhdIGlmCglOQU1FTEVOICE9IE1FTUxFTi4KClRodSBBdWcgMTMgMTc6NTA6MDkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xOC4KCgkqIG1haW4uYzogRG9uJ3QgI2luY2x1ZGUgPHRpbWUuaD47IG1ha2UuaCBhbHJlYWR5IGRvZXMuCgpNb24gQXVnIDEwIDE3OjAzOjAxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEZpeGVkIGNvcHlpbmcgb2Ygc3VmZml4IHdoZW4gYnVpbGRpbmcKCWFsc29fbWFrZSBlbHRzLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKTogTWFrZSBzdXJlIEJVRkZFUiBpcwoJbnVsbC10ZXJtaW5hdGVkIGJlZm9yZSByZXBsYWNpbmcgbmV3bGluZXMuCgoJKiBjb21wYXRNYWtlZmlsZSAobWFuZGlyKTogVXNlIG1hbiQobWFuZXh0KSwgbm90IGFsd2F5cyBtYW5sLgoKU3VuIEF1ZyAgMiAwMTo0Mjo1MCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChuZXdfcGF0dGVybl9ydWxlKTogTm90IHN0YXRpYy4KCSogcnVsZS5oOiBEZWNsYXJlIGl0LgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBOZXcgZnVuY3Rpb24sIG1vc3QgY29kZSBmcm9tIHJlbmFtZV9maWxlLgoJKHJlbmFtZV9maWxlKTogQ2FsbCBpdC4KCSogZmlsZS5oIChmaWxlX2hhc2hfZW50ZXIpOiBEZWNsYXJlIGl0LgoKCSogZGVwLmg6IERvYyBmaXguCgpUaHUgSnVsIDMwIDE1OjQwOjQ4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBIYW5kbGUgdXNhZ2VfYW5kX2V4aXQgd2hlbiBidWlsZGluZwoJbG9uZyBvcHRpb25zIHZlY3Rvci4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IE1ha2UgUkNTIHJ1bGVzIHVzZSAkKENIRUNLT1VULHYpLgoJKGRlZmF1bHRfdmFyaWFibGVzKTogRGVmaW5lIENIRUNLT1VULHYgKGhhaXJ5KS4KCgkqIG1ha2UuaCBbIUhBVkVfU1lTX1NJR0xJU1QgJiYgSEFWRV9fU1lTX1NJR0xJU1RdOiAjZGVmaW5lCglzeXNfc2lnbGlzdCB0byBfc3lzX3NpZ2xpc3QuCgpTdW4gSnVsIDI2IDE2OjU2OjMyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBORVdTOiBBZGQgaGVhZGVyIGFuZCB0YWlsIGNvcHlyaWdodCBpbmZvIGxpa2UgRW1hY3MgTkVXUy4KCgkqIG1ha2UuaCBbQU5TSV9TVFJJTkddOiBEb24ndCAjZGVmaW5lIGluZGV4LCByaW5kZXgsIGJjbXAsIGJ6ZXJvLAoJYmNvcHkgaWYgYWxyZWFkeSAjZGVmaW5lJ2QuCglbU1REQ19IRUFERVJTXSAocXNvcnQsIGFib3J0LCBleGl0KTogRGVjbGFyZSBoZXJlLgoJWyEgX19HTlVfTElCUkFSWV9fICYmICFQT1NJWF06IE5vdCBoZXJlLgoKCSogbWFrZS5oIFtfQUlYXTogI3ByYWdtYSBhbGxvY2EgZmlyc3QgdGhpbmcuCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBTZXQgdGhlIGNvbW1hbmRfc3RhdGUgdG8gY3NfcnVubmluZwoJd2hlbiB3ZSBxdWV1ZSBhIGpvYiBvbiB3YWl0aW5nX2pvYnMuCgpGcmkgSnVsIDI0IDAyOjE2OjI4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IFVzZSAiIiBpbnN0ZWFkIG9mIG5pbAoJZm9yIGVtcHR5IHZhbHVlLgoKVGh1IEp1bCAyMyAyMjozMToxOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE3LgoKCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gudHlwZSk6IEFkZCBhbHRlcm5hdGl2ZSB1c2FnZV9hbmRfZXhpdC4KCShjb21tYW5kX3N3aXRjaGVzKTogQWRkIC1oLy0taGVscC4KClRodSBKdWwgMTYgMTQ6Mjc6NTAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIEdOVW1ha2VmaWxlIChtYWtlLSQodmVyc2lvbikudGFyLlopOiBJbmNsdWRlIE5FV1MsIG5vdCBDSEFOR0VTLgoJKiBSRUFETUUudGVtcGxhdGU6IE1lbnRpb24gTkVXUy4KCSogQ0hBTkdFUzogUmVuYW1lZCB0byBORVdTLgoKCSogbWFpbi5jIFshIFNURENfSEVBREVSU10gW3N1bl06IERvbid0IGRlY2xhcmUgZXhpdC4KClR1ZSBKdWwgMTQgMTg6NDg6NDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IFNldCAtbyBmaWxlcycgY29tbWFuZF9zdGF0ZXMgdG8gY3NfZmluaXNoZWQuCgoJKiBydWxlLmMgKGNvdW50X2ltcGxpY2l0X3J1bGVfbGltaXRzKTogRGVjcmVtZW50IG51bV9wYXR0ZXJuX3J1bGVzCgl3aGVuIHRvc3NpbmcgYSBydWxlLgoKCSogbWFpbi5jIChtYWluKTogVXNlIGFsbG9jYSBvbmx5IGluIHNpbXBsZSBsb2NhbCB2YXIgYXNzaWdubWVudCwKCWZvciBicmFpbmRlYWQgU0dJIGNvbXBpbGVyLgoKCSogcnVsZS5jIChwcmludF9ydWxlX2RhdGFfYmFzZSk6IEJhcmYgaWYgbnVtX3BhdHRlcm5fcnVsZXMgaXMKCWluY29uc2lzdGVudCB3aXRoIHRoZSBudW1iZXIgY29tcHV0ZWQgd2hlbiBsaXN0aW5nIHRoZW0uCgpNb24gSnVsIDEzIDE3OjUxOjUzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogRm9yICQ/IGFuZCAkXiBlbHRzIHRoYXQgYXJlIGFyY2hpdmUKCW1lbWJlciByZWZzLCB1c2UgbWVtYmVyIG5hbWUgb25seS4KCkZyaSBKdWwgMTAgMDA6MDU6MDQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZhcmlhYmxlLmggKHN0cnVjdCB2YXJpYWJsZS5leHBvcnQpOiBBZGQgbmV3IGFsdGVybmF0aXZlIHZfaWZzZXQuCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IENoZWNrIGZvciBpdC4KCShkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IFNldCBpdCBmb3IgTUFLRUZJTEVTLgoKVGh1IEp1bCAgOSAyMToyNDoyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBSZW1vdmUgZ2V0bG9hZGF2Zy5vOyAkKGV4dHJhcykgZ2V0cyBpdC4KCShyZW1vdGUubyk6IFVzZSAkKHNyY2RpcikvcmVtb3RlLmMsIG5vdCAkcmVtb3RlLmM8LgoJKGRpc3RjbGVhbiwgbW9zdGx5Y2xlYW4pOiBOZXcgdGFyZ2V0cy4KClR1ZSBKdWwgIDcgMTk6MTI6NDkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xNi4KCgkqIGNvbXBhdE1ha2VmaWxlIChjb25maWcuc3RhdHVzKTogUmVtb3ZlIHJ1bGUuCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBGcmVlIEMgYWZ0ZXIgdXNpbmcgQy0+ZmlsZSwgbm90IGJlZm9yZS4KClNhdCBKdWwgIDQgMjA6NTE6NDkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMsIGpvYi5jLCBtYWluLmMsIG1ha2UuaCwgcmVtb3RlLWNzdG1zLmM6IFVzZSAjaWZkZWYKCUhBVkVfKiBpbnN0ZWFkIG9mICNpZm5kZWYgKl9NSVNTSU5HLgoJKiBjb25maWd1cmUuaW46IFVzZSBBQ19IQVZFX0ZVTkNTIGluc3RlYWQgb2YgQUNfTUlTU0lOR19GVU5DUyAoZ29uZSkuCgpUaHUgSnVsICAyIDE4OjQ3OjUyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBtYWtlbGV2ZWw+MCBvciAtQyBpbXBsaWVzIC13LgoKVHVlIEp1biAzMCAyMDo1MDoxNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jLCBqb2IuYywgZnVuY3Rpb24uYzogRG9uJ3QgI2luY2x1ZGUgPGVycm5vLmg+LgoJbWFrZS5oOiBEbyBpdCBoZXJlIGluc3RlYWQuCgkqIGFyc2Nhbi5jIChhcl9tZW1iZXJfdG91Y2gpOiBEb24ndCBkZWNsYXJlIGVycm5vLgoKVGh1IEp1biAyNSAxNzowNjo1NSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIEdOVW1ha2VmaWxlIChtYWtlLSQodmVyc2lvbikudGFyLlopOiBEZXBlbmQgb24gSU5TVEFMTCwgY29uZmlndXJlLmluLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogSWYgY29tbWFuZHMgb3IgZGVwcyBhcmUgcnVubmluZyBhZnRlcgoJdXBkYXRlX2ZpbGVfMSByZXR1cm5zLCBicmVhayBvdXQgb2YgdGhlIDo6IHJ1bGUgKC0+cHJldikgbG9vcCBhbmQKCWp1c3QgcmV0dXJuLgoKCSogam9iLmMJKGpvYl9uZXh0X2NvbW1hbmQpOiBOZXcgZnVuY3Rpb247IGNvZGUgZnJvbSBzdGFydF9qb2IuCgkoc3RhcnRfam9iX2NvbW1hbmQpOiBSZW5hbWVkIGZyb20gc3RhcnRfam9iLiAgQ2FsbCBqb2JfbmV4dF9jb21tYW5kCglhbmQgcmVjdXJzZSBmb3IgZW1wdHkgY29tbWFuZCBsaW5lcyBhbmQgLW4uCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBDYWxsIHN0YXJ0X2pvYl9jb21tYW5kLCBub3Qgc3RhcnRfam9iLgoJKG5ld19qb2IpOiBDYWxsIGpvYl9uZXh0X2NvbW1hbmQgdG8gcHJpbWUgdGhlIGNoaWxkIHN0cnVjdHVyZSwgYW5kCgl0aGVuIGNhbGwgc3RhcnRfd2FpdGluZ19qb2IuCgkocmVhcF9jaGlsZHJlbik6IFVzZSBqb2JfbmV4dF9jb21tYW5kIGFuZCBzdGFydF9qb2JfY29tbWFuZC4KCShzdGFydF93YWl0aW5nX2pvYik6IENhbGwgc3RhcnRfcmVtb3RlX2pvYl9wIGhlcmUsIGFuZCBzdG9yZSBpdHMKCXJlc3VsdCBpbiBDLT5yZW1vdGUuICBJZiB6ZXJvLCBjaGVjayB0aGUgbG9hZCBhdmVyYWdlIGFuZAoJbWF5YmUgcHV0IEMgb24gd2FpdGluZ19qb2JzLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogVGVzdCBDSElMRC0+cmVtb3RlIHJhdGhlciB0aGFuIGNhbGxpbmcKCXN0YXJ0X3JlbW90ZV9qb2JfcC4gIERvbid0IGRvIGxvYWQgYXZnIGNoZWNraW5nIGF0IGFsbCBoZXJlLgoKCSogbWFpbi5jIChtYWluKTogRG9uJ3QgaGFuZGxlIFNJR0lMTCwgU0lHSU9ULCBTSUdFTVQsIFNJR0JVUywKCVNJR1NFR1YsIFNJR0ZQRSBvciBTSUdUUkFQLgoKCSogY29tcGF0TWFrZWZpbGUgKGdsb2IvbGliZ2xvYi5hKTogRG9uJ3QgcGFzcyBzcmNkaXIgdG8gc3ViLW1ha2UuCgljb25maWd1cmUgd2lsbCBzZXQgaXQgaW4gZ2xvYi9NYWtlZmlsZS4KCldlZCBKdW4gMjQgMTk6NDA6MzQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGRpci5jIFtESVJFTlRdIChkaXJlY3QpOiBEb24ndCBkZWZpbmUgdG8gZGlyZW50LgoJWyEgRElSRU5UXSAoZGlyZWN0KTogRGVmaW5lIHRvIGRpcmVudC4KCShkaXJfZmlsZV9leGlzdHNfcCk6IFVzZSBzdHJ1Y3QgZGlyZW50IGluc3RlYWQgb2Ygc3RydWN0IGRpcmVjdC4KCgkqIG1ha2UuaCAoZ2V0Y3dkKTogTm8gc3BhY2UgYmV0d2VlbiBtYWNybyBhbmQgKCBmb3IgYXJncyEKCgkqIGpvYi5jIChzdGFydF9qb2IpOiBEb24ndCBwdXQgdGhlIGpvYiBvbiB3YWl0aW5nX2pvYnMgaWYKCWpvYl9zbG90c191c2VkPT0wLgoKCSogbWFrZS50ZXhpbmZvIChNaXNzaW5nKTogU2hvcnRlbmVkIHRpdGxlLgoKVHVlIEp1biAyMyAxODo0MjoyMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IFByaW50ICJybSIgY29tbWFuZHMgdW5kZXIgLW4uCgpNb24gSnVuIDIyIDE2OjIwOjAyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE1LgoKRnJpIEp1biAxOSAxNjoyMDoyNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgW01fVU5JWF06ICN1bmRlZiBNX1hFTklYLgoKV2VkIEp1biAxNyAxNzo1OToyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IFB1dCBAIHByZWZpeCBvbiBSQ1MgY21kcy4KClR1ZSBKdW4gMTYgMTk6MjQ6MTcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChnZXRsb2FkYXZnLm8pOiBSZW1vdmVkIHNwZWNpYWwgcnVsZS4KCShDRkxBR1MpOiBEb24ndCBpbmNsdWRlICQoZGVmaW5lcykuCgkoLmMubyk6IERlZmluZSBzdWZmaXggcnVsZS4KCShnbG9iL2xpYmdsb2IuYSk6IFBhc3MgQ1BQRkxBR1M9JChkZWZpbmVzKSB0byBzdWJtYWtlLgoJKEdFVE9QVF9TUkMsIHNyY3MsIHRhZ3NyY3MpOiBQcmVmaXggZmlsZXMgd2l0aCAkKHNyY2RpcikvLgoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpOiBNb3ZlZCBsb2NhbCB2YXJzIGluc2lkZSAjaWYnZCBibG9jay4KCgkqIG1ha2UuaCAobWF4KTogUmVtb3ZlZC4KCSogZXhwYW5kLmMgKHZhcmlhYmxlX2J1ZmZlcl9vdXRwdXQpOiBEb24ndCB1c2UgaXQuCgoJKiBjb21wYXRNYWtlZmlsZSAoSU5TVEFMTCk6IERlZmluZS4KCShNYWtlZmlsZSk6IE5ldyBydWxlIHRvIG1ha2UgZnJvbSBNYWtlZmlsZS5pbi4KCShzcmNkaXIpOiBEZWZpbmUuCgkoVlBBVEgpOiBEZWZpbmUuCgkoZ2V0bG9hZGF2Zy5vLCByZW1vdGUubyk6IFVzZSBhdXRvY29uZiAkZm9vPCBoYWNrLgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKTogUmVtb3ZlZCByZXR1cm4uCgpNb24gSnVuIDE1IDE3OjQyOjUxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTQuCgoJKiBtYWtlLnRleGluZm8gKFN1bW1hcnkpOiBOZXcgbm9kZS4KCShTcGVjaWFsIFRhcmdldHMpOiBNZW50aW9uIC5FWFBPUlRfQUxMX1ZBUklBQkxFUyBoZXJlLgoKCSogdmFyaWFibGUuYyAobWF4KTogTW92ZWQgdG8gbWFrZS5oLgoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMsIHNyY3MpOiBBZGRlZCBhciAmIGFyc2Nhbi4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYik6IE5ldyBmdW5jdGlvbiwgMm5kIGhhbGYgb2YgbmV3X2pvYi4KCShuZXdfam9iKTogQ2FsbCBpdC4KCShzdGFydF93YWl0aW5nX2pvYnMpOiBOZXcgZnVuY3Rpb24uCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IENhbGwgc3RhcnRfd2FpdGluZ19qb2JzIGF0IHRoZSB0b3AKCW9mIHRoZSBtYWluIGxvb3AuCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzLCBzcmNzKTogUmVtb3ZlZCBsb2FkLCBhZGRlZCBnZXRsb2FkYXZnLgoKRnJpIEp1biAxMiAxOTozMzoxNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChsb2FkX3Rvb19oaWdoKTogTmV3IGZ1bmN0aW9uLiAgVXNlcyBnZXRsb2FkYXZnLgoJKHdhaXRpbmdfam9icyk6IE5ldyB2YXJpYWJsZS4KCShzdGFydF9qb2IpOiBEb24ndCBjYWxsIHdhaXRfdG9fc3RhcnRfam9iLiAgSW5zdGVhZCwgaWYKCWxvYWRfdG9vX2hpZ2ggcmV0dXJucyBub256ZXJvLCBhZGQgdGhlIGNoaWxkIHRvIHRoZQoJYHdhaXRpbmdfam9icycgY2hhaW4gYW5kIHJldHVybiB3aXRob3V0IHN0YXJ0aW5nIHRoZSBqb2IuCgpUaHUgSnVuIDExIDAwOjA1OjI4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2J1ZmZlcl9vdXRwdXQpOiBNYWRlIGdsb2JhbCBhZ2Fpbi4KCSogdmFyaWFibGUuaDogQW5kIGRlY2xhcmUgaXQuCgoJKiBhcnNjYW4uYyAoUE9SVEFSKTogRGVmaW5lIGZvciBhbGwgc3lzdGVtcyBpZiBQT1JUNUFSIGlzIG5vdCBkZWZpbmVkLgoJKEFSX05BTUVMRU4sIEFSX1RSQUlMSU5HX1NMQVNIKTogUmVtb3ZlZC4KCShhcl9zY2FuKTogRG9uJ3QgdXNlIGl0LiAgRG9uJ3QgI2lmZGVmIEFSX1RSQUlMSU5HX1NMQVNIOyBqdXN0IGxvb2sKCWZvciBhIHNsYXNoIGluIHRoZSBhcmNoaXZlIGF0IHJ1biB0aW1lLgoJKGFyX25hbWVfZXF1YWwpOiBSZXdyb3RlIC5vIGhhY2tpbmcgdG8gbm90IHVzZSBBUl9OQU1FTEVOLCBhbmQgdG8KCWNvcGUgd2l0aCB0cmFpbGluZy1zbGFzaCBhbmQgbm9uLXRyYWlsaW5nLXNsYXNoIGFyY2hpdmVzLgoKCSogbWFpbi5jIChtYWluKSBbISBTRVRWQlVGX1JFVkVSU0VEXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgVVNHcjMgZXQgYWwuCglbU0VUVkJVRl9SRVZFUlNFRF06IEFsd2F5cyBhbGxvY2F0ZSBhIGJ1ZmZlciBvdXJzZWx2ZXMuCgoJKiBsb2FkLmMgKGxvYWRfYXZlcmFnZSkgW3NnaV06IFVzZSBzeXNtcCBjYWxsLgoKCSogY29tcGF0TWFrZWZpbGUgKElOU1RBTExfREFUQSwgSU5TVEFMTF9QUk9HUkFNKTogRGVmaW5lLgoJKCQoYmluZGlyKS8kKGluc3RuYW1lKSwgJChtYW5kaXIpL21ha2UuJChtYW5leHQpKTogVXNlIHRoZW0uCgoJKiBtYWtlLmggW0hBVkVfVkZPUktfSF06ICNpbmNsdWRlIDx2Zm9yay5oPi4KCSh2Zm9yaywgVkZPUktfTkFNRSk6IERvbid0IGRlZmluZS4KCSogam9iLmMgKHN0YXJ0X2pvYik6IFVzZSAidmZvcmsiIGluIHBsYWNlIG9mIFZGT1JLX05BTUUuCgoJKiBtYWtlLmggW0hBVkVfTElNSVRTX0gsIEhBVkVfU1lTX1BBUkFNX0hdOiBJZiAjZGVmaW5lJ2QsICNpbmNsdWRlCgl0aGUgZWFjaCBmaWxlLiAgUmVhcnJhbmdlZCBQQVRIX01BWCBoYWNraW5nLgoJKiBqb2IuYzogUmVhcnJhbmdlZCBOR1JPVVBTX01BWCBoYWNraW5nLgoKCSogcmVtYWtlLmMgKGZzdGF0LCB0aW1lKTogRG9uJ3QgZGVjbGFyZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChkZWZpbmVzKTogVmFsdWUgaXMgQERFRlNALgoJKExPQURMSUJFUyk6IFZhbHVlIGlzIEBMSUJTQC4KCShleHRyYXMpOiBWYWx1ZSBpcyBATElCT0JKU0AuCgkoQVJDSElWRVMsIEFSQ0hJVkVTX1NSQywgQUxMT0NBU1JDKTogUmVtb3ZlZC4KCSogYXJzY2FuLmMsIGFyLmM6IFN1cnJvdW5kIGJvZHkgd2l0aCAjaWZuZGVmIE5PX0FSQ0hJVkVTLgoKCSogbWlzYy5jIFshIEhBVkVfVU5JU1REX0hdOiBUZXN0IGluc3RlYWQgb2YgIVBPU0lYIHRvIGRlY2wgZ2V0KmlkLgoKCSogbWFrZS5oIFtHRVRDV0RfTUlTU0lOR106IFRlc3QgaW5zdGVhZCBvZiAhVVNHICYmICFQT1NJWCBldCBhbC4KCShnZXRjd2QpOiBKdXN0IGRlY2xhcmUgaWYgcHJlc2VudC4gIElmIG5vdCwgZGVjbGFyZSBhcyBhIG1hY3JvCgl1c2luZyBnZXR3ZCwgYW5kIGRlY2xhcmUgZ2V0d2QuCglbUEFUSF9NQVhdIChHRVRfUEFUSF9NQVgpOiAjZGVmaW5lIHRvIFBBVEhfTUFYLgoJKiBtYWluLmMgKG1haW4sCWxvZ193b3JraW5nX2RpcmVjdG9yeSk6IFVzZSBnZXRjd2QgaW5zdGVhZCBvZiBnZXR3ZC4KCgkqIG1haW4uYyAobWFpbikgW1NFVExJTkVCVUZfTUlTU0lOR106IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTRy4KCgkqIG1ha2UuaCAoU0lHSEFORExFUiwgU0lHTkFMKTogUmVtb3ZlZC4KCShSRVRTSUdUWVBFKTogRGVmaW5lIGlmIG5vdCAjZGVmaW5lJ2QuCgkqIG1haW4uYyAobWFpbik6IFVzZSBzaWduYWwgaW4gcGxhY2Ugb2YgU0lHTkFMLgoKCSogbWFpbi5jIFtTWVNfU0lHTElTVF9NSVNTSU5HXTogVGVzdCBpbnN0ZWFkIG9mIFVTRy4KCgkqIGpvYi5jIChzZWFyY2hfcGF0aCkgW0dFVEdST1VQU19NSVNTSU5HXTogVGVzdCBpbnN0ZWFkIG9mIFVTRy4KCVtIQVZFX1VOSVNURF9IXTogVGVzdCBpbnN0ZWFkIG9mIFBPU0lYIHRvIG5vdCBkZWNsIGdldGdyb3Vwcy4KCgkqIG1haW4uYyBbISBIQVZFX1VOSVNURF9IXTogVGVzdCBpbnN0ZWFkIG9mICFQT1NJWCB0byBkZWNsIGNoZGlyLgoJWyEgU1REQ19IRUFERVJTXTogVGVzdCBpbnN0ZWFkIG9mICFQT1NJWCB0byBkZWNsIGV4aXQgJiBhdG9mLgoKCSogam9iLmMgKGNoaWxkX2hhbmRsZXIpLCBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpOiBSZXR1cm4KCVJFVFNJR1RZUEUgaW5zdGVhZCBvZiBpbnQuCgkqIG1haW4uYyAobWFpbik6IERlY2xhcmUgZmF0YWxfZXJyb3Jfc2lnbmFsIGFuZCBjaGlsZF9oYW5kbGVyIGhlcmUKCXRvIHJldHVybiBSRVRTSUdUWVBFOyByZW1vdmVkIHRvcC1sZXZlbCBkZWNsIG9mIGZvcm1lci4KCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCksIGpvYi5jICh1bmJsb2NrX3NpZ3MsIHN0YXJ0X2pvYiksCgltYWluLmMgW1NJR1NFVE1BU0tfTUlTU0lOR106IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTRy4KCldlZCBKdW4gMTAgMjI6MDY6MTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyBbSEFWRV9XQUlUUElEXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgVVNHLgoJWyEgSEFWRV9VTklTVERfSF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mICFQT1NJWCB0byBkZWNsYXJlIG1pc2MgZm5zLgoJKEdJRF9UKTogRG9uJ3QgI2RlZmluZS4KCShzZWFyY2hfcGF0aCk6IFVzZSBnaWRfdCBpbnN0ZWFkIG9mIEdJRF9ULgoJW0dFVERUQUJMRVNJWkVfTUlTU0lORywgU1lTX1NJR0xJU1RfTUlTU0lORywgRFVQMl9NSVNTSU5HXTogVGVzdAoJdGhlc2UgaW5kaXZpZHVhbGx5IGluc3RlYWQgb2YgVVNHIGZvciBhbGwuCgkqIG1ha2UuaCAoY3RpbWUpOiBEb24ndCBkZWNsYXJlLiAgI2luY2x1ZGUgdGltZS5oIGluc3RlYWQuCglbSEFWRV9VTklTVERfSF06ICNpbmNsdWRlIDx1bmlzdGQuaD4gYW5kICNkZWZpbmUgUE9TSVggI2lmZGVmCglfUE9TSVhfVkVSU0lPTi4KCSogZGlyLmMgW19fR05VX0xJQlJBUllfX10gKERfTkFNTEVOKTogRGVmaW5lIHRvIHVzZSBkX25hbWxlbiBtZW1iZXIuCgkqIG1ha2UuaCBbTkVFRF9NRU1PUllfSF06IE9ubHkgaW5jbHVkZSBtZW1vcnkuaCAjaWZkZWYgdGhpcy4KCgkqIGFyc2Nhbi5jOiBSZW1vdmVkICNpZmRlZiBtZXNzIGFib3V0IHN0cmluZy5oIGV0IGFsLgoJSnVzdCAjaW5jbHVkZSBtYWtlLmggaW5zdGVhZC4KCSogbWFrZS5oIChmc3RhdCwgYXRvbCk6IERlY2xhcmUuCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpOiBEb24ndCB1c2Ugc2lnbWFzayB0byBjaGVjayBmb3IKCXByb3BhZ2F0ZWQgc2lnbmFsczsgdXNlIHx8cyBpbnN0ZWFkLgoJKFBST1BBR0FURURfU0lHTkFMX01BU0spOiBSZW1vdmVkLgoJKGZhdGFsX2Vycm9yX3NpZ25hbCkgW1BPU0lYXTogVXNlIHNpZ3Byb2NtYXNrIGluIHBsYWNlIG9mIHNpZ3NldG1hc2suCgoJKiB2YXJpYWJsZS5jICh2YXJpYWJsZV9idWZmZXIsIHZhcmlhYmxlX2J1ZmZlcl9sZW5ndGgsCglpbml0aWFsaXplX3ZhcmlhYmxlX291dHB1dCwgdmFyaWFibGVfb3V0cHV0KTogTW92ZWQgdG8gZXhwYW5kLmM7CgltYWRlIGFsbCBzdGF0aWMuCgkoc3RydWN0IG91dHB1dF9zdGF0ZSwgc2F2ZV92YXJpYWJsZV9vdXRwdXQsCglyZXN0b3JlX3ZhcmlhYmxlX291dHB1dCk6IFJlbW92ZWQuCgkqIGV4cGFuZC5jIChpbml0aWFsaXplX3ZhcmlhYmxlX291dHB1dCk6IFB1dCBhIE5VTCBhdCB0aGUgYmVnaW5uaW5nCglvZiB0aGUgbmV3IGJ1ZmZlciBhZnRlciBhbGxvY2F0aW5nIGl0LgoJKGFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmRfZm9yX2ZpbGUpOiBEb24ndCB1c2UKCXtzYXZlLHJlc3RvcmV9X3ZhcmlhYmxlX291dHB1dC4gIERvIGl0IGJ5IGhhbmQgaW5zdGVhZCwga2VlcGluZwoJc3RhdGUgb24gdGhlIHN0YWNrIGluc3RlYWQgb2YgbWFsbG9jJ2luZyBpdC4KCShhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kKTogUmVtb3ZlZC4KCSogdmFyaWFibGUuaCAoYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZCk6IERlZmluZSBoZXJlIGFzIG1hY3JvLgoJKHZhcmlhYmxlX2J1ZmZlcl9vdXRwdXQsIGluaXRpYWxpemVfdmFyaWFibGVfb3V0cHV0LAoJc2F2ZV92YXJpYWJsZV9vdXRwdXQsIHJlc3RvcmVfdmFyaWFibGVfb3V0cHV0KTogUmVtb3ZlZCBkZWNscy4KCgkqIHJlYWQuYyAoY29uZGl0aW9uYWxfbGluZSk6IEZvciBhbiBpZiBjbWQsIGlmIGFueSBlbHQgb2YgdGhlCgljb25kaXRpb25hbHMgc3RhY2sgaXMgaWdub3JpbmcsIGp1c3QgcHVzaCBhIG5ldyBsZXZlbCB0aGF0IGlnbm9yZXMKCWFuZCByZXR1cm4gMTsgZG9uJ3QgZXZhbHVhdGUgdGhlIGNvbmRpdGlvbi4KClRodSBKdW4gIDQgMjE6MDE6MjAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBQdXQgI2lmZGVmJ3MgYXJvdW5kIGZyb2JiaW5nIFNJR1NZUyBhbmQgU0lHQlVTLgoKCSogam9iLmMgKGdldGR0YWJsZXNpemUpOiBEb24ndCBkZWNsYXJlIG9yICNkZWZpbmUgaWYgYWxyZWFkeSAjZGVmaW5lJ2QuCgpXZWQgSnVuICAzIDIzOjQyOjM2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChzbmFwX2RlcHMpOiBJZiBgLkVYUE9SVF9BTExfVkFSSUFCTEVTJyBpcyBhIHRhcmdldCwgc2V0CglleHBvcnRfYWxsX3ZhcmlhYmxlcy4KCSogbWFrZS50ZXhpbmZvIChWYXJpYWJsZXMvUmVjdXJzaW9uKTogRG9jdW1lbnQgLkVYUE9SVF9BTExfVkFSSUFCTEVTLgoKVHVlIEp1biAgMiAyMTowODozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xMy4KCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IENhbGN1bGF0ZSBsZW5ndGggZm9yIF5EIGFuZCA/RAoJaW5kaXZpZHVhbGx5LCBtYWtpbmcgc3VyZSB0byBnaXZlIHRoZW0gYXQgbGVhc3QgZW5vdWdoIHNwYWNlIGZvciAiLi8iLgoKCSogbWFrZS5oIFtDUkFZXTogI2RlZmluZSBzaWduYWwgdG8gYnNkc2lnbmFsLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW0NSQVldOiBEZWZpbmUgUEMsIFNFR0xEUiwKCUNGNzdQUEZMQUdTLCBDRjc3UFAsIENGVCwgQ0YsIGFuZCBGQy4KCgkqIGFyc2Nhbi5jIChBUl9IRFJfU0laRSk6IERlZmluZSB0byBzaXplb2YgKHN0cnVjdCBhcl9oZHIpLCBpZiBpdAoJd2Fzbid0IGRlZmluZWQgYnkgPGFyLmg+LgoKVGh1IE1heSAyOCAwMDo1Njo1MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xMi4KClR1ZSBNYXkgMjYgMDE6MjY6MzAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKG5ld19wYXR0ZXJuX3J1bGUpOiBJbml0aWFsaXplIExBU1RSVUxFIHRvIG5pbCwgbm90CglwYXR0ZXJuX3J1bGVzLgoKTW9uIE1heSAyNSAxOTowMjoxNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSW5pdGlhbGl6ZSBhbGwgdGhlIGxvbmdfb3B0aW9uIGVsdCBtZW1iZXJzLgoKVGh1IE1heSAyMSAxNjozNDoyNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChUZXh0IEZ1bmN0aW9ucyk6IENvcnJlY3QgZmlsdGVyLW91dCBkZXNjcmlwdGlvbi4KClR1ZSBNYXkgMTkgMjA6NTA6MDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAocmVhbGNsZWFuKTogRG9uJ3QgcmVtb3ZlIGJhY2t1cCBmaWxlcy4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogQWxsb2NhdGUgQVJHQysxIGVsdHMgaW4gYG90aGVyX2FyZ3MnLgoKU3VuIE1heSAxNyAxNjozODo0OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTEuCgpUaHUgTWF5IDE0IDE2OjQyOjMzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3QgZGllIGlmIHdhaXQgcmV0dXJucyBFSU5UUi4KCldlZCBNYXkgMTMgMTg6Mjg6MjUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IEFsd2F5cyBydW4gdGhlIG5leHQgY29tbWFuZCBmb3IgYQoJc3VjY2Vzc2Z1bCB0YXJnZXQuICBJZiB3ZSBhcmUgZ29pbmcgdG8gZGllLCB3ZSBkb24ndCB3YW50IHRvIGxlYXZlCgl0aGUgdGFyZ2V0IHBhcnRpYWxseSBtYWRlLgoKVHVlIE1heSAxMiAwMDozOToxOSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEFmdGVyIGxvb3AsIGlmIHdlIG9ubHkKCWhhdmUgb25lIHdvcmQsIGNoZWNrIGl0IGZvciBiZWluZyBhIHNoZWxsIGNvbW1hbmQuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEFsbG9jYXRlIEFSR0Mgc2xvdHMgaW4gb3RoZXJfYXJncyB0bwoJYmVnaW4gd2l0aCwgc28gd2UgbmV2ZXIgbmVlZCB0byB3b3JyeSBhYm91dCBncm93aW5nIGl0LgoJSWYgd2UgZ2V0IGEgbm9uLW9wdGlvbiBhcmcgYW5kIFBPU0lYTFlfQ09SUkVDVCBpcyBpbiB0aGUKCWVudmlyb25tZW50LCBicmVhayBvdXQgb2YgdGhlIGxvb3AuICBBZnRlciB0aGUgbG9vcCwgYWRkIGFsbCByZW1haW5pbmcKCWFyZ3MgdG8gb3RoZXJfYXJncyBsaXN0LgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBGb3IgcG9zaXRpdmVfaW50IGFuZCBmbG9hdGluZyBzd2l0Y2hlcwoJd2hlbiBvcHRhcmcgaXMgbmlsLCB1c2UgbmV4dCBhcmcgaWYgaXQgbG9va3MgcmlnaHQgKHN0YXJ0IHdpdGggYQoJZGlnaXQsIG9yIG1heWJlIGRlY2ltYWwgcG9pbnQgZm9yIGZsb2F0aW5nKS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogQWx3YXlzIHNldCBTSEVMTCB0bwoJZGVmYXVsdCBpZiBpdCBjb21lcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFNldCBpdHMgZXhwb3J0IGJpdC4KCSogbWFrZS50ZXhpbmZvIChFbnZpcm9ubWVudCk6IERvY3VtZW50IGNoYW5nZS4KCk1vbiBNYXkgMTEgMDA6MzI6NDYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjEwLgoKCSogY29tcGF0TWFrZWZpbGUgKHRhZ3MsIFRBR1MpOiBVc2UgdmFycyBmb3IgY21kcy4KCShFVEFHUywgQ1RBR1MpOiBEZWZpbmUuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IElmIGEgc3dpdGNoZXMgZWx0IGhhcyBhIG5pbCBsb25nX25hbWUsCgltYWtlIHRoZSBsb25nIG9wdGlvbiBuYW1lIGVsdCBiZSAiIi4KCUZpeGVkIGxvb3AgdG8gbm90IGlnbm9yZSBhbGwgdGhlIG9wdGlvbnMuCgoJKiBtYWtlLnRleGluZm8gKE9wdGlvbiBTdW1tYXJ5KTogQWRkZWQgbG9uZyBvcHRpb25zLgoKCSogbWFpbi5jIChzd2l0Y2hlcyk6IENoYW5nZWQgLW0ncyBkZXNjcmlwdGlvbiB0byAiLWIiLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFdoZW4gcHJpbnRpbmcgdGhlIHVzYWdlIG1lc3NhZ2UsIGRvbid0IHByaW50Cglzd2l0Y2hlcyB3aG9zZSBkZXNjcmlwdGlvbnMgc3RhcnQgd2l0aCAtLgoJV2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGxpc3Qgb2YgbmFtZXMgZm9yIHN3aXRjaCAtQywgc2VhcmNoIHRoZQoJc3dpdGNoZXMgdmVjdG9yIGZvciBzd2l0Y2hlcyB3aG9zZSBkZXNjcmlwdGlvbnMgYXJlICItQyIuCgoJKiBtYWluLmMgKHN3aXRjaGVzKTogQ2FsbCAtUyAtLW5vLWtlZXAtZ29pbmcsIG5vdCAtLWRvbnQta2VlcC1nb2luZy4KCUNhbGwgLUkgLS1pbmNsdWRlLWRpciwgbm90IC0taW5jbHVkZS1wYXRoLgoJKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBBZGRlZCAtLW5ldyA9PSAtVywgLS1hc3N1bWUtbmV3ID09IC1XLAoJLS1hc3N1bWUtb2xkID09IC1vLCAtLW1heC1sb2FkID09IC1sLCAtLWRyeS1ydW4gPT0gLW4sIC0tcmVjb24gPT0gLW4sCgktLW1ha2VmaWxlID09IC1mLgoKCSogbWFpbi5jIChzd2l0Y2hlcyk6IFJlbW92ZWQgYm9ndXMgInNpbGVudCIgZWx0LgoJKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBEZWZpbmUgbmV3IHZhci4KCShkZWNvZGVfc3dpdGNoZXMpOiBBZGQgbG9uZ19vcHRpb25fYWxpYXNlcyBvbnRvIHRoZSBlbmQgb2YgdGhlIGxvbmcKCW9wdGlvbnMgdmVjdG9yIGNyZWF0ZWQgZm9yIGdldG9wdF9sb25nLgoJTG9vayB0aHJvdWdoIGxvbmdfb3B0aW9uX2FsaWFzZXMgZm9yIGV4dHJhIG5hbWVzIHRvIGxpc3QKCWluIHVzYWdlIG1lc3NhZ2UuCgpTYXQgTWF5ICA5IDAwOjIxOjA1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBGaXhlZCB0byBwcm9wZXJseSBub3QgcHJpbnQgdGhlCglsZWF2aW5nIG1lc3NhZ2Ugd2hlbiB3ZSBoYXZlbid0IHByaW50ZWQgdGhlIGVudGVyaW5nIG1lc3NhZ2UuCgpGcmkgTWF5ICA4IDIxOjU1OjM1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gpOiBBZGRlZCBlbHRzIGBsb25nX25hbWUnLAoJYGRlc2NyaXB0aW9uJywgYW5kIGBhcmdkZXNjJy4KCShzd2l0Y2hlcyk6IEFkZGVkIGluaXRpYWxpemVycyBmb3IgbmV3IG1lbWJlcnMuCgkoZGVjb2RlX3N3aXRjaGVzKTogUmV3cml0dGVuIHRvIHVzZSBnZXRvcHRfbG9uZy4KCSogY29tcGF0TWFrZWZpbGUgKEdFVE9QVCwgR0VUT1BUX1NSQyk6IERlZmluZS4KCShvYmpzLCBzcmNzKTogSW5jbHVkZSB0aGVtLgoKCSogam9iLmMgKGNoaWxkX2RpZWQpOiBSZW5hbWVkIHRvIGRlYWRfY2hpbGRyZW47IG1hZGUgc3RhdGljLgoJKGNoaWxkX2hhbmRsZXIpOiBJbmNyZW1lbnQgZGVhZF9jaGlsZHJlbiBpbnN0ZWFkIG9mIHNldHRpbmcgY2hpbGRfZGllZC4KCShyZWFwX2NoaWxkcmVuKTogRGVjcmVtZW50IGRlYWRfY2hpbGRyZW4gaW5zdGVhZCBvZiBjbGVhcmluZwoJY2hpbGRfZGllZC4gIFRoZSBwb2ludCBvZiBhbGwgdGhpcyBpcyB0byBhdm9pZCBwcmludGluZyAid2FpdGluZwoJZm9yIHVuZmluaXNoZWQgam9icyIgd2hlbiB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJsb2NrLgoJVGhpcyBoYXBwZW5lZCB3aGVuIG11bHRpcGxlIFNJR0NITERzIGJlZm9yZSByZWFwX2NoaWxkcmVuIHdhcyBjYWxsZWQuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IElmIEVSUiBpcyBzZXQsIHNvIHdlIGRvbid0IGNhbGwgc3RhcnRfam9iCglvbiB0aGUgY2hpbGQgYmVpbmcgcmVhcGVkLCBpbnN0ZWFkIHNldCBpdHMgY29tbWFuZF9zdGF0ZSB0bwoJY3NfZmluaXNoZWQuCgkocmVhcF9jaGlsZHJlbiwgY2hpbGRfaGFuZGxlciwgbmV3X2pvYik6IEkgYWRkZWQgc2V2ZXJhbAoJZGVidWdnaW5nIHByaW50ZidzIHdoaWxlIGZpeGluZyB0aGlzLiAgSSBsZWZ0IHRoZW0gaW4gaWYgKGRlYnVnX2ZsYWcpCgliZWNhdXNlIHRoZXkgbWF5IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoaXMgc3R1ZmYgYWdhaW4uCgpXZWQgTWF5ICA2IDIyOjAyOjM3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IHZfZXhwb3J0IGlzIG5vdCAxLgoKTW9uIE1heSAgNCAxNzoyNzozNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjkuCgoJKiB2YXJpYWJsZS5jIChleHBvcnRfYWxsX3ZhcmlhYmxlcyk6IE5ldyB2YXJpYWJsZS4KCSh0YXJnZXRfZW52aXJvbm1lbnQpOiBFeHBvcnQgdmFyaWFibGVzIHdob3NlIGBleHBvcnQnIG1lbWJlciBpcwoJdl9kZWZhdWx0IGlmIGV4cG9ydF9hbGxfdmFyaWFibGVzIGlzIHNldCBhbmQgdGhlaXIgbmFtZXMgYXJlIGJlbmlnbi4KCSogdmFyaWFibGUuaDogRGVjbGFyZSBleHBvcnRfYWxsX3ZhcmlhYmxlcy4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgZXhwb3J0IG9yIHVuZXhwb3J0IGlzIGdpdmVuIHdpdGggbm8KCWFyZ3MsIHNldCBvciBjbGVhciBleHBvcnRfYWxsX3ZhcmlhYmxlcywgcmVzcGVjdGl2ZWx5LgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogRXhjbHVkZSBNQUtFTEVWRUwgaW4gdGhlIGxvb3AsCglzbyBpdCBpc24ndCBkdXBsaWNhdGVkIHdoZW4gd2UgYWRkIGl0IGF0IHRoZSBlbmQuCgpTdW4gTWF5ICAzIDE3OjQ0OjQ4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjguCgoJKiB2YXJpYWJsZS5oIChzdHJ1Y3QgdmFyaWFibGUpOiBBZGRlZCBuZXcgbWVtYmVyIGBleHBvcnQnLgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfdmFyaWFibGVfaW5fc2V0KTogSW5pdGlhbGl6ZSBpdCB0byB2X2RlZmF1bHQuCgkodGFyZ2V0X2Vudmlyb25tZW50KTogRG9uJ3QgY2hlY2sgZm9yIC5OT0VYUE9SVC4KCUV4cG9ydCB2YXJpYWJsZXMgd2hvc2UgYGV4cG9ydCcgbWVtYmVyIGlzIHZfZGVmYXVsdCBhbmQgdGhhdCB3b3VsZAoJaGF2ZSBiZWVuIGV4cG9ydGVkIHVuZGVyIC5OT0VYUE9SVCwgYW5kIHZhcmlhYmxlcyB3aG9zZSBgZXhwb3J0JwoJbWVtYmVyIGlzIHZfZXhwb3J0LgoJKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogUmV0dXJuIHRoZSB2YXJpYWJsZSBkZWZpbmVkLgoJKiB2YXJpYWJsZS5oICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IENoYW5nZWQgZGVjbC4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmVjb2duaXplIGBleHBvcnQnIGFuZCBgdW5leHBvcnQnIGRpcmVjdGl2ZXMuCgpGcmkgTWF5ICAxIDExOjM5OjM4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbikgW1BPU0lYXTogUmV2ZXJzZWQgYXJncyB0byBzaWdhZGRzZXQuCgpUaHUgQXByIDMwIDE3OjMzOjMyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgW1BPU0lYIHx8ICFVU0ddICh1bmJsb2NrX3NpZ3MpOiBOZXcgZm4uCgkoc3RhcnRfam9iKTogQmxvY2sgc2lnbmFscyBiZWZvcmUgZm9ya2luZy4KCShuZXdfam9iKTogVW5ibG9jayBzaWduYWxzIGFmdGVyIHB1dHRpbmcgdGhlIG5ldyBjaGlsZCBvbiB0aGUgY2hhaW4uCgkqIG1haW4uYyAobWFpbikgW1BPU0lYXTogVXNlIHNpZ3NldF90IGZhdGFsX3NpZ25hbF9zZXQgaW5zdGVhZCBvZgoJaW50IGZhdGFsX3NpZ25hbF9tYXNrLgoKCSogbG9hZC5jIFtzZ2ldIChMREFWX0NWVCk6IERlZmluZS4KCldlZCBBcHIgMjkgMTc6MTU6NTkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjcuCgoJKiBsb2FkLmMgKGxvYWRfYXZlcmFnZSkgW3NnaV06IENsZWFyIHRoZSBoaWdoIGJpdCBvZiB0aGUgYWRkcmVzcwoJZnJvbSB0aGUgc3ltYm9sIHRhYmxlIGJlZm9yZSBsb29raW5nIGl0IHVwIGluIGttZW0uCgoJKiBtaXNjLmMgKGZhdGFsLCBtYWtlZmlsZV9mYXRhbCk6IFB1dCAqKiogaW4gZmF0YWwgZXJyb3IgbWVzc2FnZXMuCgkocmVtYWtlX2ZpbGUpOiBObyBsb25nZXIgbmVlZGVkIGluIG1lc3NhZ2UgaGVyZS4KCgkqIG1haW4uYyAoZGllKTogQ2FsbCByZWFwX2NoaWxkcmVuIHdpdGggQkxPQ0s9PTEuCgpUdWUgQXByIDI4IDIwOjQ0OjM1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAoZnJlZXJ1bGUpOiBEb24ndCBzZXQgTEFTVFJVTEUtPm5leHQgaWYgTEFTVFJVTEUgaXMgbmlsLgoKU3VuIEFwciAyNiAxNTowOTo1MSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKGNvdW50X2ltcGxpY2l0X3J1bGVfbGltaXRzKTogSW5pdGlhbGl6ZSBMQVNUUlVMRSB0byBuaWwsCglub3QgdG8gaGVhZCBvZiBjaGFpbi4gIEV4dHJhY3QgbmV4dCBwdHIgYmVmb3JlIHdlIG1pZ2h0IGRvCglmcmVlcnVsZSwgYW5kIHVzZSB0aGF0IGZvciBuZXh0IGl0ZXJhdGlvbi4KCShmcmVlcnVsZSk6IFN0aWxsIGRvIG5leHQgcHRyIGZyb2JiaW5nIGlmIExBU1RSVUxFIGlzIG5pbC4KClR1ZSBBcHIgMjEgMDM6MTY6MjkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY2hpbGRfZXJyb3IpOiBSZW1vdmVkIGV4dHJhICVzIGZyb20gZXJyb3IgbXNnIGZvcm1hdC4KCgkqIFZlcnNpb24gMy42Mi42LgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEb24ndCBzdGFydCBsYXRlciBjb21tYW5kcyBpbiBhIHNlcXVlbmNlCglpZiBFUlIgaXMgbm9uemVyby4KCgkqIGpvYi5jIChuZXdfam9iKTogQWx3YXlzIGNhbGwgcmVhcF9jaGlsZHJlbiB3aXRoIEJMT0NLPT0wIGZpcnN0IHRoaW5nLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBOZXcgZnVuY3Rpb247IHdvcmsgdGhhdCB1c2VkIHRvIGJlIGRvbmUgaW4KCWNoaWxkX2hhbmRsZXIuCgkoY2hpbGRfZGllZCk6IE5ldyBnbG9iYWwgdmFyLgoJKGNoaWxkX2hhbmRsZXIpOiBOb3cganVzdCBzZXRzIGNoaWxkX2RpZWQuCgkod2FpdF9mb3JfY2hpbGRyZW4pOiBSZW1vdmVkLgoJKHVua25vd25fY2hpbGRyZW5fcG9zc2libGUsIGJsb2NrX3NpZ25hbHMsIHVuYmxvY2tfc2lnbmFscywKCXB1c2hfc2lnbmFsc19ibG9ja2VkX3AsIHBvcF9zaWduYWxzX2Jsb2NrZWRfcCk6IFJlbW92ZWQuCgkoY2hpbGRfZXhlY3V0ZV9qb2IpOiBSZW1vdmVkIGNhbGwgdG8gdW5ibG9ja19zaWduYWxzLgoJKG5ld19qb2IpOiBSZW1vdmVkIGNhbGxzIHRvIHB1c2hfc2lnbmFsc19ibG9ja2VkX3AgYW5kCglwb3Bfc2lnbmFsc19ibG9ja2VkX3AuCgkqIGpvYi5oOiBEZWNsYXJlIHJlYXBfY2hpbGRyZW4sIG5vdCB3YWl0X2Zvcl9jaGlsZHJlbi4KCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSwgam9iLmMgKG5ld19qb2IpLAoJbG9hZC5jIFtMREFWX0JBU0VEXSAod2FpdF90b19zdGFydF9qb2IpLCBtYWluLmMgKGRpZSksCglyZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pLCBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzaGVsbCcpOgoJQ2hhbmdlZCB3YWl0X2Zvcl9jaGlsZHJlbiBjYWxscyB0byByZWFwX2NoaWxkcmVuLgoJU29tZSBuZWVkZWQgdG8gYmUgbG9vcHMgdG8gd2FpdCBmb3IgYWxsIGNoaWxkcmVuIHRvIGRpZS4KCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSwgbWFpbi5jIChtYWluLAoJbG9nX3dvcmtpbmdfZGlyZWN0b3J5KSwgZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKTogUmVtb3ZlZCBjYWxscwoJdG8gcHVzaF9zaWduYWxzX2Jsb2NrZWRfcCBhbmQgcG9wX3NpZ25hbHNfYmxvY2tlZF9wLgoJKiBqb2IuaDogUmVtb3ZlZCBkZWNscy4KCgkqIGpvYi5oOiBBZGRlZCBjb3B5cmlnaHQgbm90aWNlLgoKV2VkIEFwciAxNSAwMjowMjo0MCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNoaWxkX2Vycm9yKTogTm8gKioqIGZvciBpZ25vcmVkIGVycm9yLgoKVHVlIEFwciAxNCAxODozMToyMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAoREVCVUdQMik6IFVzZSBkbyAuLi4gd2hpbGUgKDApIGluc3RlYWQgb2YgaWYgLi4uIGVsc2UgdG8KCWF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IERvbid0IHJlbW92ZSAuLyB3aGVuIGl0IGlzIGZvbGxvd2VkIGJ5IGEKCWJsYW5rLgoKTW9uIEFwciAxMyAyMTo1NjoxNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIChERUJVR1BSKTogVXNlIGRvIC4uLiB3aGlsZSAoMCkgaW5zdGVhZCBvZiBpZiAuLi4gZWxzZSB0bwoJYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBSdW4gZmlsZV9tdGltZSBvbiB0aGUgYWxzb19tYWtlCglmaWxlcywgc28gdnBhdGhfc2VhcmNoIGNhbiBoYXBwZW4uCgoJKiBHTlVtYWtlZmlsZSAodGVzdHMpOiBVc2UgcGVybCB0ZXN0IHN1aXRlIGZyb20gY3NhQHN3LnN0cmF0dXMuY29tLgoJKGFscGhhLWZpbGVzKTogSW5jbHVkZSB0ZXN0IHN1aXRlIHRhciBmaWxlLgoKRnJpIEFwciAgMyAwMDo1MDoxMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi41LgoKV2VkIEFwciAgMSAwNTozMToxOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlLCB1cGRhdGVfZmlsZV8xKTogRG8gY2hlY2tfcmVuYW1lZCBvbiBlbHRzCglvZiBkZXAgY2hhaW5zIHdoZW4gdHJhdmVyc2luZyB0aGVtLiAgU29tZXRoaW5nIHVucmVsYXRlZCBtaWdodCBoYXZlCglyZW5hbWVkIG9uZSBvZiB0aGUgZmlsZXMgdGhlIGRlcCBjaGFpbiBwb2ludHMgdG8uCgoJKiBmaWxlLmMgKHJlbmFtZV9maWxlKTogSWYgRklMRSBoYXMgYmVlbiByZW5hbWVkLCBmb2xsb3cgaXRzCglgcmVuYW1lZCcgcHRyLCBzbyB3ZSBnZXQgdG8gdGhlIGZpbmFsIHJlYWwgRklMRS4gIFVzaW5nIHRoZSByZW5hbWVkCglvbmVzIGxvc2VzIGJlY2F1c2UgdGhleSBhcmUgbm90IGluIHRoZSBoYXNoIHRhYmxlLCBzbyB0aGUgcmVtb3ZhbAoJY29kZSBsb29wcyBpbmZpbml0ZWx5LgoKCSogcmVhZC5jIChyZWFkX2FsbF9tYWtlZmlsZXMpOiBDbG9iYmVyIG51bGwgdGVybWluYXRvciBpbnRvCglNQUtFRklMRVMgZXhwYW5zaW9uLCBzbyBzdHJpbmcgcGFzc2VkIHRvIHJlYWRfbWFrZWZpbGUgaXMgcHJvcGVybHkKCXRlcm1pbmF0ZWQuCgpNb24gTWFyIDMwIDIwOjE4OjAyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogJCogZm9yIGFyY2hpdmUgbWVtYmVyIHdpdGgKCWV4cGxpY2l0IGNtZHMgaXMgc3RlbSBvZiBtZW1iZXIsIG5vdCBvZiB3aG9sZSBgbGliKG1lbWJlciknLgoKVGh1IE1hciAyNiAxNToyNDozOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuNC4KClR1ZSBNYXIgMjQgMDU6MjA6NTEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAobmV3X3BhdHRlcm5fcnVsZSk6IFJ1bGVzIGFyZSBpZGVudGljYWwgb25seSBpZiBhbGwgdGhlaXIKCXRhcmdldHMgbWF0Y2ggKHJlZ2FyZGxlc3Mgb2Ygb3JkZXIpLgoKV2VkIE1hciAxMSAxMzo0OTo1NCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jIChyZW1ha2VfZmlsZSk6IENoYW5nZWQgZXJyb3IgIm5vIHdheSB0byBtYWtlIiB0byAibm8KCXJ1bGUgdG8gbWFrZSIuICBGaWF0IEh1Z2guCgoJKiBtYWtlLnRleGluZm8gKExhc3QgUmVzb3J0KTogRGVzY3JpYmUgJTo6IHJ1bGVzIGFuZCBuZXcgLkRFRkFVTFQKCWJlaGF2aW9yLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBPbmx5IHVzZSAuREVGQVVMVCBjbWRzIGlmIEZJTEUgaXMgbm90IGEKCXRhcmdldC4KClR1ZSBNYXIgMTAgMTg6MTM6MTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbW90ZS1zdHViLmMsIHJlbW90ZS1jc3Rtcy5jIChzdGFydF9yZW1vdGVfam9iKTogVGFrZSBuZXcgYXJnLAoJZW52aXJvbm1lbnQgdG8gcGFzcyB0byBjaGlsZC4KCSogam9iLmMgKHN0YXJ0X2pvYik6IFBhc3MgaXQuCgpNb24gTWFyICA5IDE5OjAwOjExIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmaWxlLmMgKGVudGVyX2ZpbGUpOiBBbHNvIHN0cmlwIC4vcyBoZXJlLCB0byBnZXQgY29tbWFuZC1saW5lCgl0YXJnZXQgbmFtZXMuCgoJKiByZW1vdGUtY3N0bXMuYzogQWRkIGNvbW1lbnQgdGVsbGluZyBwZW9wbGUgdG8gbGVhdmUgbWUgYWxvbmUuCgoJKiBjb21wYXRNYWtlZmlsZSAobWFucGFnZSBpbnN0YWxsKTogUmVtb3ZlIHRhcmdldCBiZWZvcmUgY29weWluZy4KClR1ZSBNYXIgIDMgMTg6NDM6MjEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UudGV4aW5mbyAoTWlzc2luZyk6IFJlbmFtZWQgdG8gIkluY29tcGF0aWJpbGl0aWVzIGFuZCAuLi4iLgoJQWRkZWQgcGFyYWdyYXBoIGRlc2NyaWJpbmcgJD8gaW5jb21wYXRpYmlsaXR5IHdpdGggVW5peCBhbmQgUE9TSVguMi4KClN1biBNYXIgIDEgMTU6NTA6NTQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAbnV0cmltYXQuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzaGVsbCcpOiBEb24ndCBkZWNsYXJlIGZvcmsgb3IgcGlwZS4KCVVzZSB2Zm9yayBpbnN0ZWFkIG9mIGZvcmsuCgpUdWUgRmViIDI1IDIyOjA1OjMyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKENoYWluZWQgUnVsZXMpOiBDbGFyaWZ5IC5QUkVDSU9VUyB0byBzYXZlCglpbnRlcm1lZGlhdGUgZmlsZXMuCgoJKiBsb2FkLmMgW3N1bl0gKExEQVZfQ1ZUKTogRGVmaW5lIHRvIGRpdmlkZSBieSBGU0NBTEUuCgpTdW4gRmViIDE2IDAyOjA1OjE2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMy4KClNhdCBGZWIgMTUgMTc6MTI6MjAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChtYWtlaW5mbyk6IFVzZSBlbWFjcyBiYXRjaC10ZXhpbmZvLWZvcm1hdCBmbi4KCkZyaSBGZWIgMTQgMDA6MTE6NTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENvcnJlY3RseSBoYW5kbGUgZGVmaW5lICYgZW5kZWYgaW4gaWZkZWZzLgoKCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBQYXNzIGFyZyBmb3IgJXMgaW4gZXJyb3IgbXNnLgoKCSogbWFpbi5jIChtYWluKSBbX19JQk1SMiwgUE9TSVhdOiBVc2UgY29ycmVjdCAoYSBsYSBVU0dyMykgc2V0dmJ1ZgoJY2FsbC4KCldlZCBGZWIgMTIgMTI6MDc6MzkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UudGV4aW5mbyAoTGlicmFyaWVzL1NlYXJjaCk6IFNheSBpdCBkb2VzIC91c3IvbG9jYWwvbGliIHRvby4KClN1biBGZWIgIDkgMjM6MDY6MjQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENoZWNrIGZvciBleHRyYW5lb3VzIGBlbmRlZicgd2hlbiBpZ25vcmluZy4KClRodSBGZWIgIDYgMTY6MTU6NDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yLgoKVHVlIEZlYiAgNCAyMDowNDo0NiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBDb3JyZWN0bHkgaWdub3JlCgl3aGl0ZXNwYWNlIGFmdGVyIGJhY2tzbGFzaC1OTC4KCkZyaSBKYW4gMzEgMTg6MzA6MDUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlOiBJZ25vcmUgZXJyb3JzIGZyb20gY2hncnAgYW5kIGNobW9kIHdoZW4gaW5zdGFsbGluZy4KCldlZCBKYW4gMjkgMTg6MTM6MzAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogV2hlbiBzZXR0aW5nIE1BS0VMRVZFTCBpbiB0aGUgZW52IHRvIHJlLWV4ZWMsCglhbGxvY2F0ZSBzcGFjZSBzbyBhcyBub3QgdG8gY2xvYmJlciBwYXN0IHRoZSBlbmQgb2YgdGhlIG9sZCBzdHJpbmcuCgoJKiBtYWtlLmggW0hBVkVfQUxMT0NBX0hdOiBJbmNsdWRlIDxhbGxvY2EuaD4KCSogY29tcGF0TWFrZWZpbGUgKGRlZmluZXMpOiBEb2N1bWVudCBIQVZFX0FMTE9DQV9ILgoKTW9uIEphbiAyMCAxMzo0MDowNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW1ZGT1JLX01JU1NJTkddOiBVc2UgZm9yayBpbnN0ZWFkLgoJKiBjb21wYXRNYWtlZmlsZSAoZGVmaW5lcyk6IERvY3VtZW50IHNhbWUuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IERvbid0IGNyZWF0ZSBhbiBlbXB0eQoJYXJnIGlmIGJhY2tzbGFzaC1OTCBpcyBhdCBiZWdpbm5pbmcgb2Ygd29yZC4KClN1biBKYW4gMTkgMTY6MjY6NTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIFtER1VYXTogQ2FsbCBzZXR2YnVmIGFzIGZvciBVU0dyMy4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogTm90aWNlIGNvcnJlY3RseSB0aGF0CgliYWNrc2xhc2gtTkwgaXMgdGhlIGVuZCBvZiB0aGUgYXJnIChiZWNhdXNlIGl0IGlzIHJlcGxhY2VkIHdpdGggYQoJc3BhY2UpLgoKVGh1IEphbiAxNiAxODo0MjozOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IElmIFNIRUxMIGlzIG5pbCwgc2V0IGl0Cgl0byBkZWZhdWx0X3NoZWxsIGJlZm9yZSBwcm9jZWVkaW5nLgoKCSogbWFrZS5oIFtzZ2ldOiBObyBhbGxvY2EuaCwgYWZ0ZXIgYWxsLgoKV2VkIEphbiAxNSAxMjozMDowNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKG11bHRpX2dsb2IpOiBDb25zIHVwIHRoZSBjaGFpbiBvZiB0aGUgcmVzdWx0cyBvZiBnbG9iCglmcm9tIGJhY2sgdG8gZnJvbnQsIHNvIGl0IGNvbWVzIG91dCBpbiBmb3J3YXJkIG9yZGVyLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBEb24ndCBlYXQgY2hhciBmb2xsb3dpbmcKCWJhY2tzbGFzaC1OTC4KCk1vbiBKYW4gMTMgMTk6MTY6NTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjEuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbdWx0cml4XTogR0VUPWdldCwgbGlrZSBVU0cuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFJlbW92ZSB0YWJzIGZvbGxvd2luZwoJYmFja3NsYXNoLU5MIGNvbWJvcyBpbiB0aGUgaW5wdXQgbGluZSwgc28gdGhleSBkb24ndCBzaG93IHVwIHdoZW4KCXRoYXQgbGluZSBpcyBwcmludGVkLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRG9uJ3QgY29sbGFwc2VfY29udGludWF0aW9ucyB0aGUgbGluZSBvbgoJaW5wdXQ7IGRvIGl0IG9uIHRoZSBjb3B5IHdlIGRvIHJlbW92ZV9jb21tZW50cyBvbi4KCUZvciBydWxlIGxpbmVzLCBjb2xsYXBzZV9jb250aW51YXRpb25zIHRoZSBsaW5lIGFmdGVyIGNob3BwaW5nCgkiO2NtZHMiIG9mZiB0aGUgZW5kLCBzbyB3ZSBkb24ndCBlYXQgY29udHMgaW4gdGhlIGNtZHMuCglHaXZlIGVycm9yIGZvciAiO2NtZHMiIHdpdGggbm8gcnVsZS4KCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBFYXQgYmFja3NsYXNoLU5MIGNvbWJvcwoJd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGxpbmUgdG8gcmVjdXJzZSBvbiBmb3Igc2xvdywgdG9vLgoKU2F0IEphbiAxMSAwMjoyMDoyNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBmaWxlLmMgKGVudGVyX2ZpbGUpOiBEb24ndCBzdHJpcCBsZWFkaW5nIGAuLydzLgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogVGFrZSBuZXcgYXJnIFNUUklQOyBpZiBub256ZXJvLCBkbyBpdCBoZXJlLgoJKiBkZWZhdWx0LmMgKHNldF9kZWZhdWx0X3N1ZmZpeGVzKSwgZnVuY3Rpb24uYyAoc3RyaW5nX2dsb2IpLAoJcmVhZC5jIChyZWFkX21ha2VmaWxlKSwgcnVsZS5jIChpbnN0YWxsX3BhdHRlcm5fcnVsZSk6IENoYW5nZSBjYWxsZXJzLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW19JQk1SMl06IEZDPXhsZgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBUdXJuIGJhY2tzbGFzaC1OTCBhbmQKCWZvbGxvd2luZyB3aGl0ZXNwYWNlIGludG8gYSBzaW5nbGUgc3BhY2UsIHJhdGhlciB0aGFuIGp1c3QgZWF0aW5nCgl0aGUgYmFja3NsYXNoLgoKCSogbWFrZS50ZXhpbmZvIChDb3B5aW5nKTogQGluY2x1ZGUgZ3BsLnRleGluZm8sIHJhdGhlciB0aGFuCglkdXBsaWNhdGluZyBpdHMgY29udGVudHMuCgpGcmkgTm92ICA4IDIwOjA2OjAzIDE5OTEgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IE1ha2Ugc3VyZSBub3QgdG8gYm90aGVyCglwcm9jZXNzaW5nIGFuIGVtcHR5IGxpbmUuCgoJKiBWZXJzaW9uIDMuNjIuMC4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQWx3YXlzIHJlY3Vyc2UgZm9yIHNsb3c7CglzaW1wbGUgY2FzZSBkaWRuJ3QgaGFuZGxlIGZpbmRpbmcgbmV3bGluZXMuCgpUdWUgTm92ICA1IDE4OjUxOjEwIDE5OTEgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFNldCBSRVNUUCBwcm9wZXJseSB3aGVuCglzbG93OyBkb24ndCBcaWZ5IHBhc3QgYSBuZXdsaW5lLgoKRnJpIE5vdiAgMSAxOTozNDoyOCAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtzZ2ldOiAjaW5jbHVkZSA8YWxsb2NhLmg+LgoKDAoKU2VlIENoYW5nZUxvZy4xIGZvciBlYXJsaWVyIGNoYW5nZXMuCg==