QXBhY2hlIENvbW1vbnMgSU8gClZlcnNpb24gMi4xMS4wClJlbGVhc2UgTm90ZXMKCklOVFJPRFVDVElPTjoKCkNvbW1vbnMgSU8gaXMgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGxpa2UgamF2YS5pby4gIApDbGFzc2VzIGluIHRoaXMgcGFja2FnZSBhcmUgY29uc2lkZXJlZCB0byBiZSBzbyBzdGFuZGFyZCBhbmQgb2Ygc3VjaCBoaWdoIApyZXVzZSBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmlvLgoKVGhlIEFwYWNoZSBDb21tb25zIElPIGxpYnJhcnkgY29udGFpbnMgdXRpbGl0eSBjbGFzc2VzLCBzdHJlYW0gaW1wbGVtZW50YXRpb25zLCBmaWxlIGZpbHRlcnMsCmZpbGUgY29tcGFyYXRvcnMsIGVuZGlhbiB0cmFuc2Zvcm1hdGlvbiBjbGFzc2VzLCBhbmQgbXVjaCBtb3JlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMi4xMS4wCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpKYXZhIDggcmVxdWlyZWQuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKCkZpeGVkIEJ1Z3M6Cm8gSU8tNzQxOiAgRmlsZVV0aWxzLmxpc3RGaWxlcyBkb2VzIG5vdCBsaXN0IG1hdGNoaW5nIGZpbGVzIGlmIEZpbGUgcGFyYW1ldGVyIGlzIGEgc3ltYm9saWMgbGluay4gVGhhbmtzIHRvIFphY2ggU2hlcm1hbi4gCm8gSU8tNzI0OiAgRmlsZVV0aWxzI2RlbGV0ZURpcmVjdG9yeShGaWxlKSBleGNlcHRpb24gSmF2YWRvYyBpbmFjY3VyYXRlIHVwZGF0ZSAjMjQ1LiBUaGFua3MgdG8gbGlyYW4yMDAwLiAKbyAgICAgICAgICBNaW5vciBjaGFuZ2VzICMyNDMuIFRoYW5rcyB0byBBcnR1cm8gQmVybmFsLiAKbyAgICAgICAgICBSZXBsYWNlIGNvbnN0cnVjdGlvbiBvZiBGaWxlSW5wdXRTdHJlYW0gYW5kIEZpbGVPdXRwdXRTdHJlYW0gb2JqZWN0cyB3aXRoIEZpbGVzIE5JTyBBUElzLiAjMjIxLiBUaGFua3MgdG8gQXJ0dXJvIEJlcm5hbC4gCm8gICAgICAgICAgRml4IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW4gSU9FeGNlcHRpb25MaXN0IGNvbnN0cnVjdG9ycy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgUmVtb3ZlIElPRXhjZXB0aW9uIGZyb20gdGhlIG1ldGhvZCBzaWduYXR1cmVzIHRoYXQgbm8gbG9uZ2VyIHRocm93IElPRXhjZXB0aW9uLgogICAgICAgICAgIFRoaXMgbWFpbnRhaW5zIGJpbmFyeSBjb21wYXRpYmlsaXR5IGJ1dCBub3Qgc291cmNlIGNvbXBhdGliaWxpdHkuCiAgICAgICAgICAgLSBGaWxlbmFtZVV0aWxzCiAgICAgICAgICAgICAgIGRpcmVjdG9yeUNvbnRhaW5zKFN0cmluZywgU3RyaW5nKQogICAgICAgICAgIC0gQm91bmRlZFJlYWRlcgogICAgICAgICAgICAgICBCb3VuZGVkUmVhZGVyKGphdmEuaW8uUmVhZGVyLCBpbnQpCiAgICAgICAgICAgLSBJT1V0aWxzCiAgICAgICAgICAgICAgIGxpbmVJdGVyYXRvcihqYXZhLmlvLklucHV0U3RyZWFtLCBDaGFyc2V0KQogICAgICAgICAgICAgICBsaW5lSXRlcmF0b3IoamF2YS5pby5JbnB1dFN0cmVhbSwgU3RyaW5nKQogICAgICAgICAgICAgICB0b0J5dGVBcnJheShTdHJpbmcpCiAgICAgICAgICAgICAgIHRvSW5wdXRTdHJlYW0oQ2hhclNlcXVlbmNlLCBTdHJpbmcpCiAgICAgICAgICAgICAgIHRvSW5wdXRTdHJlYW0oU3RyaW5nLCBTdHJpbmcpCiAgICAgICAgICAgICAgIHRvU3RyaW5nKGJ5dGVbXSkKICAgICAgICAgICAgICAgdG9TdHJpbmcoYnl0ZVtdLCBTdHJpbmcpIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoKQ2hhbmdlczoKbyAgICAgICAgICBBZGQgU3ltYm9saWNMaW5rRmlsZUZpbHRlci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgQWRkIHRlc3QgdG8gbWFrZSBzdXJlIHRoZSBzZXR0ZXIgb2YgQW5kRmlsZUZpbHRlciB3b3JrcyBjb3JyZWN0bHkgIzI0NC4gVGhhbmtzIHRvIHRybmNhdGUuCm8gICAgICAgICAgQWRkIFhtbFN0cmVhbVJlYWRlcihQYXRoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgQnVtcCBtb2NraXRvLWlubGluZSBmcm9tIDMuMTEuMCB0byAzLjExLjIgIzI0Ny4gVGhhbmtzIHRvIERlcGVuZGFib3QuIApvICAgICAgICAgIEJ1bXAgam1oLnZlcnNpb24gZnJvbSAxLjI3IHRvIDEuMzIgIzIzNy4gVGhhbmtzIHRvIERlcGVuZGFib3QuIApvICAgICAgICAgIEJ1bXAgc3BvdGJ1Z3MgZnJvbSA0LjIuMyB0byA0LjMuMCAjMjQ5LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCgpDb21wYXRpYmlsaXR5IHdpdGggMi42OgpCaW5hcnkgY29tcGF0aWJsZTogWWVzLgpTb3VyY2UgY29tcGF0aWJsZTogWWVzLgpTZW1hbnRpYyBjb21wYXRpYmxlOiBZZXMuCgpDb21tb25zIElPIDIuOS4wIHJlcXVpcmVzIEphdmEgOC4KQ29tbW9ucyBJTyAyLjguMCByZXF1aXJlcyBKYXZhIDguCkNvbW1vbnMgSU8gMi43IHJlcXVpcmVzIEphdmEgOC4KQ29tbW9ucyBJTyAyLjYgcmVxdWlyZXMgSmF2YSA3LgpDb21tb25zIElPIDIuNSByZXF1aXJlcyBKYXZhIDYuCkNvbW1vbnMgSU8gMi40IHJlcXVpcmVzIEphdmEgNi4KQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSmF2YSA2LgpDb21tb25zIElPIDIuMiByZXF1aXJlcyBKYXZhIDUuCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIEphdmEgMS4zLgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWlvL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBJTywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIElPIHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1pby8KCkRvd25sb2FkIHBhZ2U6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWlvL2Rvd25sb2FkX2lvLmNnaQoKSGF2ZSBmdW4hCi1BcGFjaGUgQ29tbW9ucyBUZWFtCgoKQXBhY2hlIENvbW1vbnMgSU8gClZlcnNpb24gMi4xMC4wClJlbGVhc2UgTm90ZXMKCklOVFJPRFVDVElPTjoKCkNvbW1vbnMgSU8gaXMgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGxpa2UgamF2YS5pby4gIApDbGFzc2VzIGluIHRoaXMgcGFja2FnZSBhcmUgY29uc2lkZXJlZCB0byBiZSBzbyBzdGFuZGFyZCBhbmQgb2Ygc3VjaCBoaWdoIApyZXVzZSBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmlvLgoKVGhlIEFwYWNoZSBDb21tb25zIElPIGxpYnJhcnkgY29udGFpbnMgdXRpbGl0eSBjbGFzc2VzLCBzdHJlYW0gaW1wbGVtZW50YXRpb25zLCBmaWxlIGZpbHRlcnMsCmZpbGUgY29tcGFyYXRvcnMsIGVuZGlhbiB0cmFuc2Zvcm1hdGlvbiBjbGFzc2VzLCBhbmQgbXVjaCBtb3JlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMi4xMC4wCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpKYXZhIDggcmVxdWlyZWQuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvICAgICAgICAgICBBZGQgYW5kIHVzZSBSZWdleEZpbGVGaWx0ZXIudG9TdHJpbmcoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgIEFkZCBhbmQgdXNlIFJlZ2V4RmlsZUZpbHRlci5SZWdleEZpbGVGaWx0ZXIoUGF0dGVybiwgRnVuY3Rpb248UGF0aD4sIFN0cmluZz4pIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvICAgICAgICAgICBBZGQgYW5kIHVzZSBJT0Nhc2UuaXNDYXNlU2Vuc2l0aXZlKElPQ2FzZSkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoKRml4ZWQgQnVnczoKbyBJTy03MzM6ICBSZWdleEZpbGVGaWx0ZXIgdXNlcyB0aGUgcGF0aCBhbmQgZmlsZSBuYW1lIGluc3RlYWQgb2YganVzdCB0aGUgZmlsZSBuYW1lLiBUaGFua3MgdG8gSmltIFNlbGxlcnMsIEdhcnkgR3JlZ29yeS4gCm8gSU8tNzM0OiAgVGhlIE9TR2kgbWFuaWZlc3Qgbm93IGNvbnRhaW5zIHN1bi4qIGltcG9ydCBwYWNrYWdlcyAjMjM5LiBUaGFua3MgdG8gRXJpYyBOb3JtYW4uIApvIElPLTU4NTogIFNhbml0aXplIGRvdWJsZSBzbGFzaCBhZnRlciBwcmVmaXggIzc5LiBUaGFua3MgdG8gQWRhbSBNY0NsZW5hZ2hhbi4gCgpDaGFuZ2VzOgpvICAgICAgICAgICBCdW1wIGFjdGlvbnMvY2FjaGUgZnJvbSAyLjEuNSB0byAyLjEuNiAjMjM4LiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCm8gICAgICAgICAgIEJ1bXAganVuaXQtcGlvbmVlciBmcm9tIDEuNC4xIHRvIDEuNC4yICMyNDAuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKbyAgICAgICAgICAgQnVtcCBjaGVja3N0eWxlIGZyb20gOC40MiB0byA4LjQzICMyNDEuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKbyAgICAgICAgICAgQnVtcCBtb2NraXRvLWlubGluZSBmcm9tIDMuMTAuMCB0byAzLjExLjAgIzI0Mi4gVGhhbmtzIHRvIERlcGVuZGFib3QuIAoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuNjoKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IFllcy4KU2VtYW50aWMgY29tcGF0aWJsZTogWWVzLgoKQ29tbW9ucyBJTyAyLjkuMCByZXF1aXJlcyBKYXZhIDguCkNvbW1vbnMgSU8gMi44LjAgcmVxdWlyZXMgSmF2YSA4LgpDb21tb25zIElPIDIuNyByZXF1aXJlcyBKYXZhIDguCkNvbW1vbnMgSU8gMi42IHJlcXVpcmVzIEphdmEgNy4KQ29tbW9ucyBJTyAyLjUgcmVxdWlyZXMgSmF2YSA2LgpDb21tb25zIElPIDIuNCByZXF1aXJlcyBKYXZhIDYuCkNvbW1vbnMgSU8gMi4zIHJlcXVpcmVzIEphdmEgNi4KQ29tbW9ucyBJTyAyLjIgcmVxdWlyZXMgSmF2YSA1LgpDb21tb25zIElPIDEuNCByZXF1aXJlcyBKYXZhIDEuMy4KCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1pby9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgSU8sIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBBcGFjaGUgQ29tbW9ucyBJTyB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtaW8vCgpEb3dubG9hZCBwYWdlOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1pby9kb3dubG9hZF9pby5jZ2kKCkhhdmUgZnVuIQotQXBhY2hlIENvbW1vbnMgVGVhbQoKCkFwYWNoZSBDb21tb25zIElPIApWZXJzaW9uIDIuOC4wClJlbGVhc2UgTm90ZXMKCklOVFJPRFVDVElPTjoKCkNvbW1vbnMgSU8gaXMgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGxpa2UgamF2YS5pby4gIApDbGFzc2VzIGluIHRoaXMgcGFja2FnZSBhcmUgY29uc2lkZXJlZCB0byBiZSBzbyBzdGFuZGFyZCBhbmQgb2Ygc3VjaCBoaWdoIApyZXVzZSBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmlvLgoKVGhlIEFwYWNoZSBDb21tb25zIElPIGxpYnJhcnkgY29udGFpbnMgdXRpbGl0eSBjbGFzc2VzLCBzdHJlYW0gaW1wbGVtZW50YXRpb25zLCBmaWxlIGZpbHRlcnMsCmZpbGUgY29tcGFyYXRvcnMsIGVuZGlhbiB0cmFuc2Zvcm1hdGlvbiBjbGFzc2VzLCBhbmQgbXVjaCBtb3JlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMi44LjAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkphdmEgOCByZXF1aXJlZC4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5pby5pbnB1dC5DaXJjdWxhcklucHV0U3RyZWFtLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmlvLmZpbGUuUGF0aFV0aWxzLmNsZWFuRGlyZWN0b3J5KFBhdGgsIEZpbGVWaXNpdE9wdGlvbi4uLikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uZmlsZS5QYXRoVXRpbHMuZGVsZXRlRGlyZWN0b3J5KFBhdGgsIEZpbGVWaXNpdE9wdGlvbi4uLikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIEFkZCBOdWxsQXBwZW5kYWJsZS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gQWRkIFBhdGhVdGlscy5nZXRBY2xFbnRyeUxpc3QoUGF0aCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIE51bGwtZ3VhcmQgSU9VdGlscy5jbG9zZShDbG9zZWFibGUsIElPQ29uc3VtZXIpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBBZGQgUmV2ZXJzZWRMaW5lc0ZpbGVSZWFkZXIucmVhZExpbmVzKGludCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIEFkZCBSZXZlcnNlZExpbmVzRmlsZVJlYWRlci50b1N0cmluZyhpbnQpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02ODQ6ICBBZGQgUGF0aFV0aWxzLmRlbGV0ZShQYXRoLCBEZWxldGVPcHRpb24uLi4pLgogICAgICAgIEFkZCBQYXRoVXRpbHMuZGVsZXRlRGlyZWN0b3J5KFBhdGgsIERlbGV0ZU9wdGlvbi4uLikuCiAgICAgICAgQWRkIFBhdGhVdGlscy5kZWxldGVGaWxlKFBhdGgsIERlbGV0ZU9wdGlvbi4uLikuCiAgICAgICAgQWRkIFBhdGhVdGlscy5zZXRSZWFkT25seShQYXRoLCBib29sZWFuLCBMaW5rT3B0aW9uLi4uKS4KICAgICAgICBBZGQgQ2xlYW5pbmdQYXRoVmlzaXRvci5DbGVhbmluZ1BhdGhWaXNpdG9yKFBhdGhDb3VudGVycywgRGVsZXRlT3B0aW9uW10sIFN0cmluZy4uLikuCiAgICAgICAgQWRkIERlbGV0aW5nUGF0aFZpc2l0b3IuRGVsZXRpbmdQYXRoVmlzaXRvcihQYXRoQ291bnRlcnMsIERlbGV0ZU9wdGlvbltdLCBTdHJpbmcuLi4pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LCBSb2JpbiBKYW5zb2huLiAKbyBBZGQgUmFuZG9tQWNjZXNzRmlsZUlucHV0U3RyZWFtLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02ODE6ICBJT1V0aWxzLmNsb3NlKENsb3NlYWJsZSkgc2hvdWxkIGFsbG93IGEgbGlzdCBvZiBjbG9zZWFibGVzLiAKbyBBZGQgSU9VdGlscy5jb25zdW1lKElucHV0U3RyZWFtKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjc2OiAgQWRkIGlzRmlsZU5ld2VyKCkgYW5kIGlzRmlsZU9sZGVyKCkgbWV0aG9kcyB0aGF0IHN1cHBvcnQgdGhlIEphdmEgOCBEYXRlL1RpbWUgQVBJLiAjMTI0LiBUaGFua3MgdG8gSXNpcmEgU2VuZXZpcmF0bmUsIEdhcnkgR3JlZ29yeS4gCm8gQWRkIGEgTWFya1NoaWVsZElucHV0U3RyZWFtICMxMTkuIFRoYW5rcyB0byBBZGFtIFJldHRlciwgR2FyeSBHcmVnb3J5LiAKbyBEZXByZWNhdGUgSU9VdGlscy5MSU5FX1NFUEFSQVRPUiBpbiBmYXZvciBvZiBKYXZhIDcncyBTeXN0ZW0ubGluZVNlcGFyYXRvcigpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKCkZpeGVkIEJ1Z3M6Cm8gQ2hhclNlcXVlbmNlUmVhZGVyLnNraXAgc2hvdWxkIHJldHVybiAwIGluc3RlYWQgb2YgRU9GIG9uIHN0cmVhbSBlbmQgIzEyMy4gVGhhbmtzIHRvIFJvYiBTcG9vciwgSm9jaGVuIFdpZWRtYW5uLiAKbyBJbXBsZW1lbnQgQ2hhclNlcXVlbmNlUmVhZGVyLnJlYWR5KCkgIzEyMi4gVGhhbmtzIHRvIFJvYiBTcG9vci4gCm8gSU8tNjY5OiAgRml4IGNvZGUgc21lbGxzOyBmaXggdHlwb3MgIzExNS4gVGhhbmtzIHRvIFhlbm9BbWVzcywgR2FyeSBHcmVnb3J5LiAKbyBBZGQgY2FjaGluZyBmb3IgcmVxdWlyZWQgY2hhcnNldHMgIzEyMC4gVGhhbmtzIHRvIEplcm9tZSBXb2xmZiwgR2FyeSBHcmVnb3J5LiAKbyBJTy02NzM6ICBNYWtlIHNvbWUgc2ltcGxpZmljYXRpb25zICMxMjEuIFRoYW5rcyB0byBKZXJvbWUgV29sZmYuIApvIElPLTY3NDogIEluZmluaXRlQ2lyY3VsYXJJbnB1dFN0cmVhbSBpcyBub3QgaW5maW5pdGUgaWYgaXRzIGlucHV0IGJ1ZmZlciBjb250YWlucyAtMS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjc1OiAgSW5maW5pdGVDaXJjdWxhcklucHV0U3RyZWFtIHRocm93cyBhIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbiB3aGVuIHJlYWRpbmcgaWYgaXRzIGlucHV0IGJ1ZmZlciBpcyBzaXplIDAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY3NzogIEZpbGVTeXN0ZW0uZ2V0Q3VycmVudCgpIGRvZXMgbm90IHJldHVybiB0aGUgY29ycmVjdCBlbnVtLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02Nzk6ICBpbnB1dC5BYnN0cmFjdENoYXJhY3RlckZpbHRlclJlYWRlciBwYXNzZXMgY291bnQgb2YgY2hhcnMgcmVhZCAjMTMyLiBUaGFua3MgdG8gcHJvbmVlbC4gCm8gSU8tNjgzOiAgQ2lyY3VsYXJCdWZmZXJJbnB1dFN0cmVhbS5yZWFkKCkgZmFpbHMgdG8gY29udmVydCBieXRlIHRvIHVuc2lnbmVkIGludCAKbyBGaXggU3BvdEJ1Z3MgaXNzdWVzIGluIG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY3MjogIENvcHlpbmcgYSBGaWxlIHNldHMgbGFzdCBtb2RpZmllZCBkYXRlIHRvIDAxIEphbnVhcnkgMTk3MC4gCm8gSU8tNjc2OiAgUHJldmVudCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiBSZXZlcnNlZExpbmVzRmlsZVJlYWRlciBjb25zdHJ1Y3RvcnMgIzExNy4gVGhhbmtzIHRvIE1pY2hhZWwgRXJuc3QsIEdhcnkgR3JlZ29yeS4gCgpDaGFuZ2VzOgpvIFJlcGxhY2UgRmluZEJ1Z3Mgd2l0aCBTcG90QnVncy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gbWF2ZW4tY2hlY2tzdHlsZS1wbHVnaW4gMy4xLjAgLT4gMy4xLjEuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIFVwZGF0ZSB0ZXN0cyBmcm9tIG9yZy5hcGFjaGUuY29tbW9uczpjb21tb25zLWxhbmczIDMuMTAgdG8gMy4xMS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gVXBkYXRlIGNvbW1vbnMtcGFyZW50IGZyb20gNTAgdG8gNTEgIzEyOS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gVXBkYXRlIGFjdGlvbnMvY2hlY2tvdXQgZnJvbSB2MSB0byB2Mi4zLjEgIzEyNi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gVXBkYXRlIGp1bml0LXBpb25lZXIgZnJvbSAwLjYuMCB0byAwLjguMCwgIzEyNywgIzEzNS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gVXBkYXRlIG1vY2tpdG8tY29yZSBmcm9tIDMuMy4zIHRvIDMuNS45ICMxMjgsICMxMzMsICMxNDUsICMxNDksICMxNTEuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIFVwZGF0ZSBzcG90YnVncyBmcm9tIDQuMC42IHRvIDQuMS4xICMxMzQuIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKbyBVcGRhdGUganVuaXQtcGlvbmVlciBmcm9tIDAuOC4wIHRvIDAuOS4wICMxMzguIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKbyBVcGRhdGUgYWN0aW9ucy9jaGVja291dCBmcm9tIHYyLjMuMSB0byB2Mi4zLjIgIzE0MC4gVGhhbmtzIHRvIERlcGVuZGFib3QuIApvIFVwZGF0ZSBhY3Rpb25zL3NldHVwLWphdmEgZnJvbSB2MS40LjAgdG8gdjEuNC4yICMxNDEsICMxNDguIFRoYW5rcyB0byBEZXBlbmRhYm90LiAKCkNvbXBhdGliaWxpdHkgd2l0aCAyLjc6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBZZXMuClNlbWFudGljIGNvbXBhdGlibGU6IFllcy4KCkNvbW1vbnMgSU8gMi43IHJlcXVpcmVzIEphdmEgOC4KQ29tbW9ucyBJTyAyLjYgcmVxdWlyZXMgSmF2YSA3LgpDb21tb25zIElPIDIuNSByZXF1aXJlcyBKYXZhIDYuCkNvbW1vbnMgSU8gMi40IHJlcXVpcmVzIEphdmEgNi4KQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSmF2YSA2LgpDb21tb25zIElPIDIuMiByZXF1aXJlcyBKYXZhIDUuCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIEphdmEgMS4zLgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWlvL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBJTywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIElPIHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1pby8KCkRvd25sb2FkIHBhZ2U6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWlvL2Rvd25sb2FkX2lvLmNnaQoKSGF2ZSBmdW4hCi1BcGFjaGUgQ29tbW9ucyBUZWFtCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkFwYWNoZSBDb21tb25zIElPIApWZXJzaW9uIDIuNwpSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT046CgpDb21tb25zIElPIGlzIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBsaWtlIGphdmEuaW8uICAKQ2xhc3NlcyBpbiB0aGlzIHBhY2thZ2UgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28gc3RhbmRhcmQgYW5kIG9mIHN1Y2ggaGlnaCAKcmV1c2UgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5pby4KClRoZSBBcGFjaGUgQ29tbW9ucyBJTyBsaWJyYXJ5IGNvbnRhaW5zIHV0aWxpdHkgY2xhc3Nlcywgc3RyZWFtIGltcGxlbWVudGF0aW9ucywgZmlsZSBmaWx0ZXJzLApmaWxlIGNvbXBhcmF0b3JzLCBlbmRpYW4gdHJhbnNmb3JtYXRpb24gY2xhc3NlcywgYW5kIG11Y2ggbW9yZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDIuNwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSmF2YSA4IHJlcXVpcmVkLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyAgICAgICAgICAgQWRkaW5nIHRoZSBDaXJjdWxhckJ1ZmZlcklucHV0U3RyZWFtLCBhbmQgdGhlIFBlZWthYmxlSW5wdXRTdHJlYW0uIApvIElPLTU1MzogIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZW5hbWVVdGlscy5pc0lsbGVnYWxXaW5kb3dzRmlsZU5hbWUoY2hhcikuIApvIElPLTU3NzogIEFkZCByZWFkZXJzIHRvIGZpbHRlciBvdXQgZ2l2ZW4gY2hhcmFjdGVyczogQ2hhcmFjdGVyU2V0RmlsdGVyUmVhZGVyIGFuZCBDaGFyYWN0ZXJGaWx0ZXJSZWFkZXIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTU5NDogIEFkZCBJT1V0aWxzIGNvcHkgbWV0aG9kcyB3aXRoIGphdmEubGFuZy5BcHBlbmRhYmxlIGFzIHRoZSB0YXJnZXQuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTYwNTogIEFkZCBjbGFzcyBDYW5FeGVjdXRlRmlsZUZpbHRlci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNTc4OiAgU3VwcG9ydCBqYXZhLm5pby5QYXRoIGFuZCBub24tZGVmYXVsdCBmaWxlIHN5c3RlbXMgZm9yIFJldmVyc2VkTGluZXNGaWxlUmVhZGVyICgjNjIpLiBUaGFua3MgdG8gTWFyayBDaGVzbmV5LiAKbyBJTy02MDg6ICBBZGQgYSBjb252ZW5pZW5jZSBOdWxsUHJpbnRTdHJlYW0uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTYxMjogIEFkZCBjbGFzcyBUZWVSZWFkZXIuIFRoYW5rcyB0byBSb2IgU3Bvb3IsIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjEzOiAgQWRkIGNsYXNzZXMgQ2xvc2VkUmVhZGVyIGFuZCBDbG9zZVNoaWVsZFJlYWRlci4gIzg0LiBUaGFua3MgdG8gUm9iIFNwb29yLCBHYXJ5IEdyZWdvcnkuIApvIElPLTYxNDogIEFkZCBjbGFzc2VzIFRhZ2dlZFdyaXRlciwgQ2xvc2VkV3JpdGVyIGFuZCBCcm9rZW5Xcml0ZXIuICM4Ni4gVGhhbmtzIHRvIFJvYiBTcG9vci4gCm8gSU8tNjE1OiAgQWRkIGNsYXNzZXMgVGVlV3JpdGVyLCBGaWx0ZXJDb2xsZWN0aW9uV3JpdGVyLCBQcm94eUNvbGxlY3Rpb25Xcml0ZXIsIElPRXhjZXB0aW9uTGlzdCwgSU9JbmRleGVkRXhjZXB0aW9uLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LCBSb2IgU3Bvb3IuIApvIElPLTYxNjogIEFkZCBjbGFzcyBBcHBlbmRhYmxlV3JpdGVyLiAjODcuIFRoYW5rcyB0byBSb2IgU3Bvb3IuIApvIElPLTYxNzogIEFkZCBjbGFzcyBDbG9zZVNoaWVsZFdyaXRlci4gIzgzLiBUaGFua3MgdG8gUm9iIFNwb29yLCBHYXJ5IEdyZWdvcnkuIApvIElPLTYxODogIEFkZCBjbGFzc2VzIEFkZGVkIFRhZ2dlZFJlYWRlciwgQ2xvc2VkUmVhZGVyIGFuZCBCcm9rZW5SZWFkZXIuICM4NS4gVGhhbmtzIHRvIFJvYiBTcG9vci4gCm8gSU8tNjE5OiAgU3VwcG9ydCBzdWIgc2VxdWVuY2VzIGluIENoYXJTZXF1ZW5jZVJlYWRlci4gIzkxLiBUaGFua3MgdG8gUm9iIFNwb29yLiAKbyBJTy02MzE6ICBBZGQgYSBDb3VudGluZ0ZpbGVWaXNpdG9yIChhcyB0aGUgYmFzaXMgZm9yIGEgZm9ydGhjb21pbmcgRGVsZXRpbmdGaWxlVmlzaXRvcikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTYzMjogIEFkZCBQYXRoVXRpbHMgZm9yIG9wZXJhdGlvbnMgb24gTklPIFBhdGguIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTYzMzogIEFkZCBEZWxldGluZ0ZpbGVWaXNpdG9yLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02MzU6ICBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmlvLklPVXRpbHMuY2xvc2UoQ2xvc2VhYmxlKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjM2OiAgQWRkIGFuZCByZXVzZSBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSU9VdGlscy5jbG9zZVF1aXRlbHkoQ2xvc2VhYmxlLCBDb25zdW1lcjxJT0V4Y2VwdGlvbj4pLgogICAgICAgICAgIEFkZCBhbmQgcmV1c2Ugb3JnLmFwYWNoZS5jb21tb25zLmlvLklPVXRpbHMuY2xvc2UoQ2xvc2VhYmxlLCBJT0NvbnN1bWVyPElPRXhjZXB0aW9uPikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY0NTogIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uZmlsZS5QYXRoVXRpbHMuZmlsZUNvbnRlbnRFcXVhbHMoUGF0aCwgUGF0aCwgT3Blbk9wdGlvbi4uLikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTQ1ODogIEFkZCBhIFNlcXVlbmNlUmVhZGVyIHNpbWlsYXIgdG8gamF2YS5pby5TZXF1ZW5jZUlucHV0U3RyZWFtLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LCBKb3NodWEgR2l0bGluLiAKbyBJTy02NDg6ICBJbXBsZW1lbnQgZGlyZWN0b3J5IGNvbnRlbnQgZXF1YWxpdHkuIDEwMCMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY0ODogIFJlZmFjdG9yIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBpbnRvIHN5bmNocm9uaXplZCBhbmQgdW5zeW5jaHJvbml6ZWQgdmVyc2lvbnMgIzEwOC4gVGhhbmtzIHRvIEFkYW0gUmV0dGVyLCBBbGV4IEhlcmJlcnQsIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjYyOiAgUmVmYWN0b3IgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGludG8gc3luY2hyb25pemVkIGFuZCB1bnN5bmNocm9uaXplZCB2ZXJzaW9ucyAjMTA4LiBUaGFua3MgdG8gQWRhbSBSZXR0ZXIsIEdhcnkgR3JlZ29yeS4gCgpGaXhlZCBCdWdzOgpvIElPLTU4OTogIFNvbWUgdGVzdHMgZmFpbCBpZiB0aGUgYmFzZSBwYXRoIGNvbnRhaW5zIGEgc3BhY2UuIApvIElPLTU4MjogIE1ha2UgbWV0aG9kcyBpbiBPYnNlcnZhYmxlSW5wdXRTdHJlYW0uT2JzZXJ2ZXIgcHVibGljLiBUaGFua3MgdG8gQnJ1bm8gUGFsb3MuCm8gSU8tNTM1OiAgVGhyZWFkIGJ1ZyBpbiBGaWxlQWx0ZXJhdGlvbk1vbml0b3Iuc3RvcChpbnQpLiBUaGFua3MgdG8gU3ZldGxpbiBaYXJldiwgQW50aG9ueSBSYXltb25kLiAKbyBJTy01NTc6ICBQZXJmb3JtIGxvY2FsZSBpbmRlcGVuZGVudCB1cHBlciBjYXNlIGNvbnZlcnNpb25zLiBUaGFua3MgdG8gbHVjY2lvbWFuLiAKbyBJTy01NzA6ICBNaXNzaW5nIEphdmFkb2MgaW4gRmlsZW5hbWVVdGlscyBjYXVzaW5nIFRyYXZpcy1DSSBidWlsZCB0byBmYWlsLiBUaGFua3MgdG8gUHJhbmV0IFZlcm1hLiAKbyBJTy01NzE6ICBSZW1vdmUgcmVkdW5kYW50IGlzRGlyZWN0b3J5KCkgY2hlY2sgaW4gb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlscy5saXN0RmlsZXNBbmREaXJzKEZpbGUsIElPRmlsZUZpbHRlciwgSU9GaWxlRmlsdGVyKS4gVGhhbmtzIHRvIHByYW5ldC4gCm8gSU8tNTU5OiAgRmlsZW5hbWVVdGlscy5ub3JtYWxpemUgbm93IHZlcmlmaWVzIGhvc3RuYW1lIHN5bnRheCBpbiBVTkMgcGF0aC4gCm8gSU8tNTU0OiAgRmlsZVV0aWxzLmNvcHlUb0ZpbGUoSW5wdXRTdHJlYW0gc291cmNlLCBGaWxlIGRlc3RpbmF0aW9uKSBzaG91bGQgbm90IGNsb3NlIGlucHV0IHN0cmVhbS4gVGhhbmtzIHRvIE1pY2hlbGUgTWFyaW90dGkuIApvIElPLTYwNDogIEZpbGVVdGlscy5kb0NvcHlGaWxlKEZpbGUsIEZpbGUsIGJvb2xlYW4pIGNhbiB0aHJvdyBDbG9zZWRCeUludGVycnVwdEV4Y2VwdGlvbi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjI1OiAgQ29ycmVjdGVkIG1pc2xlYWRpbmcgZXhjZXB0aW9uIG1lc3NhZ2UgZm9yIEZpbGVVdGlscy5jb3B5RGlyZWN0b3J5VG9EaXJlY3RvcnkuIFRoYW5rcyB0byBNaWtrbyBNYXVudS4gCm8gSU8tNjI2OiAgQSBtaXN0YWtlIGluIHRoZSBGaWxlbmFtZVV0aWxzLmNvbmNhdCgpJ3MgSmF2YWRvYyBhYm91dCBhbiBhYnNvbHV0ZSBwYXRoLiBUaGFua3MgdG8gWXVqaSBLb25pc2hpLiAKbyBJTy02NDA6ICBOUEUgaW4gb3JnLmFwYWNoZS5jb21tb25zLmlvLklPVXRpbHMuY29udGVudEVxdWFscyhJbnB1dFN0cmVhbSwgSW5wdXRTdHJlYW0pIHdoZW4gb25seSBvbmUgaW5wdXQgaXMgbnVsbC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjQxOiAgTlBFIGluIG9yZy5hcGFjaGUuY29tbW9ucy5pby5JT1V0aWxzLmNvbnRlbnRFcXVhbHMoUmVhZGVyLCBSZWFkZXIpIHdoZW4gb25seSBvbmUgaW5wdXQgaXMgbnVsbC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjQzOiAgTlBFIGluIG9yZy5hcGFjaGUuY29tbW9ucy5pby5JT1V0aWxzLmNvbnRlbnRFcXVhbHNJZ25vcmVFT0woUmVhZGVyLCBSZWFkZXIpIHdoZW4gb25seSBvbmUgaW5wdXQgaXMgbnVsbC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjQ0OiAgTlBFIGluIG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHMuY29udGVudEVxdWFsc0lnbm9yZUVPTChGaWxlLCBGaWxlKSB3aGVuIG9ubHkgb25lIGlucHV0IGlzIG51bGwuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY2NDogIG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHMuY29weVVSTFRvRmlsZSgqKSBvcGVuIGJ1dCBkbyBub3QgY2xvc2Ugc3RyZWFtcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCgpDaGFuZ2VzOgpvIElPLTU3MjogIFJlZmFjdG9yIGR1cGxpY2F0ZSBjb2RlIGluIG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHMuIFRoYW5rcyB0byBQcmFuZXQgVmVybWEuIApvIElPLTU4MDogIFVwZGF0ZSBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZW5hbWVVdGlscy5pc0V4dGVuc2lvbihTdHJpbmcsIFN0cmluZ1tdKSB0byB1c2UgdmFyIGFyZ3MuIApvIElPLTcwMTogIE1ha2UgYXJyYXkgZGVjbGFyYXRpb24gaW4gVGhyZXNob2xkaW5nT3V0cHV0U3RyZWFtIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBhcnJheSBkZWNsYXJhdGlvbnMgaW4gdGhlIGxpYnJhcnkgIzc3LiBUaGFua3MgdG8gUmF5bW9uZCBUYW4uIApvIElPLTYwNzogIFVwZGF0ZSBmcm9tIEphdmEgNyB0byBKYXZhIDguIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTYxMDogIFJlbW92ZSB0aHJvd3MgSU9FeGNlcHRpb24gaW4gbWV0aG9kIGlzU3ltbGluaygpICM4MC4gVGhhbmtzIHRvIFNlYmFzdGlhbi4gCm8gSU8tNjI4OiAgTWlncmF0aW9uIHRvIEpVbml0IEp1cGl0ZXIgIzk3LiBUaGFua3MgdG8gQWxsb24gTXVyZWluaWsuIApvIElPLTYzMDogIERlcHJlY2F0ZSBvcmcuYXBhY2hlLmNvbW1vbnMuaW8ub3V0cHV0Lk51bGxPdXRwdXRTdHJlYW0uTnVsbE91dHB1dFN0cmVhbSgpIGluIGZhdm9yIG9mIG9yZy5hcGFjaGUuY29tbW9ucy5pby5vdXRwdXQuTnVsbE91dHB1dFN0cmVhbS5OVUxMX09VVFBVVF9TVFJFQU0uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTYyOTogIEZpbGVVdGlscyNmb3JjZURlbGV0ZSBzaG91bGQgdXNlIEZpbGVzI2RlbGV0ZSByYXRoZXIgdGhhbiBGaWxlI2RlbGV0ZSBzbyBleGNlcHRpb24gbWVzc2FnZXMgaW5jbHVkZXMgcmVhc29uIGZvciBmYWlsdXJlLiBUaGFua3MgdG8gSWFuIFNwcmluZ2VyLCBJYW4gU3ByaW5nZXIsIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjM0OiAgTWFrZSBnZXRDYXVzZSBzeW5jaHJvbml6ZWQgYW5kIHVzZSBhIERlcXVlIGluc3RlYWQgb2YgYSBTdGFjayAjNjQuIFRoYW5rcyB0byBW4WNsYXYgSGFpc21hbiwgQnJ1bm8gUC4gS2lub3NoaXRhLCBHYXJ5IEdyZWdvcnkuIApvICAgICAgICAgICAgVXBkYXRlIHRlc3RzIGZyb20gQXBhY2hlIENvbW1vbnMgTGFuZyAzLjkgdG8gMy4xMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgICBVcGRhdGUgdGVzdHMgb3JnLmp1bml0LXBpb25lZXI6anVuaXQtcGlvbmVlciAwLjMuMCAtPiAwLjYuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgICBVcGRhdGUgdGVzdHMgb3JnLmp1bml0Lmp1cGl0ZXI6anVuaXQtanVwaXRlciA1LjUuMiAtPiA1LjYuMi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgICBVcGRhdGUgdGVzdHMgb3JnLm1vY2tpdG86bW9ja2l0by1jb3JlIDMuMC4wIC0+IDMuMy4zLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02NjY6ICBOb3JtYWxpemUgaW50ZXJuYWwgYnVmZmVycyB0byA4MTkyIGJ5dGVzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02NjU6ICBFbnN1cmUgdGhhdCBwYXNzaW5nIGEgbnVsbCBJbnB1dFN0cmVhbSByZXN1bHRzIGluIE5QRSB3aXRoIHRlc3RzICMxMTIuIFRoYW5rcyB0byBPdHRvIEZvd2xlciwgR2FyeSBHcmVnb3J5LiAKbyAgICAgICAgICAgIGNvbW1vbnMuamFjb2NvLnZlcnNpb24gMC44LjQgLT4gMC44LjUuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvICAgICAgICAgICAgY29tLmdpdGh1Yi5zaW9tNzkuamFwaWNtcDpqYXBpY21wLW1hdmVuLXBsdWdpbiAwLjE0LjEgLT4gMC4xNC4zLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02Njc6ICBBZGQgZnVuY3Rpb25hbCBpbnRlcmZhY2VzIElPRnVuY3Rpb24gYW5kIElPU3VwcGxpZXIgIzExMC4gVGhhbmtzIHRvIEFkYW0gUmV0dGVyLCBHYXJ5IEdyZWdvcnkuIApvICAgICAgICAgICAgU3VwcG9ydCBzdWIgc2VxdWVuY2VzIGluIENoYXJTZXF1ZW5jZVJlYWRlciAjOTEuIFRoYW5rcyB0byBSb2IgU3Bvb3IsIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgICBSZW1vdmUgZGVwcmVjYXRlZCBzdWRvIHNldHRpbmcuICMxMTMuIFRoYW5rcyB0byBkZW5nbGltaW5nLiAKCkNvbXBhdGliaWxpdHkgd2l0aCAyLjY6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBZZXMuClNlbWFudGljIGNvbXBhdGlibGU6IFllcy4KCkNvbW1vbnMgSU8gMi43IHJlcXVpcmVzIEphdmEgOC4KQ29tbW9ucyBJTyAyLjYgcmVxdWlyZXMgSmF2YSA3LgpDb21tb25zIElPIDIuNSByZXF1aXJlcyBKYXZhIDYuCkNvbW1vbnMgSU8gMi40IHJlcXVpcmVzIEphdmEgNi4KQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSmF2YSA2LgpDb21tb25zIElPIDIuMiByZXF1aXJlcyBKYXZhIDUuCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIEphdmEgMS4zLgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWlvL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBJTywgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIElPIHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1pby8KCkRvd25sb2FkIHBhZ2U6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWlvL2Rvd25sb2FkX2lvLmNnaQoKSGF2ZSBmdW4hCi1BcGFjaGUgQ29tbW9ucyBUZWFtCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpJTlRST0RVQ1RJT046CgpBcGFjaGUgQ29tbW9ucyBJTyBpcyBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgbGlrZSBqYXZhLmlvLgpDbGFzc2VzIGluIHRoaXMgcGFja2FnZSBhcmUgY29uc2lkZXJlZCB0byBiZSBzbyBzdGFuZGFyZCBhbmQgb2Ygc3VjaCBoaWdoCnJldXNlIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEuaW8uCgpUaGUgQXBhY2hlIENvbW1vbnMgSU8gbGlicmFyeSBjb250YWlucyB1dGlsaXR5IGNsYXNzZXMsIHN0cmVhbSBpbXBsZW1lbnRhdGlvbnMsCmZpbGUgZmlsdGVycywgZmlsZSBjb21wYXJhdG9ycywgZW5kaWFuIHRyYW5zZm9ybWF0aW9uIGNsYXNzZXMsIGFuZCBtdWNoIG1vcmUuCgpBcGFjaGUgQ29tbW9ucyBJTyAyLjYgcmVxdWlyZXMgYXQgbGVhc3QgSmF2YSA3IHRvIGJ1aWxkIGFuZCBydW4uCgoKREVQUkVDQVRJT05TCj09PT09PT09PT09PQoKQWxsIGNsb3NlUXVpZXRseSBvdmVybG9hZHMgaW4gb3JnLmFwYWNoZS5jb21tb25zLmlvLklPVXRpbHMgaGF2ZSBiZWVuCmRlcHJlY2F0ZWQuIFVzZSB0aGUgdHJ5LXdpdGgtcmVzb3VyY2VzIHN0YXRlbWVudCBvciBoYW5kbGUgc3VwcHJlc3NlZApleGNlcHRpb25zIG1hbnVhbGx5LgoKVGhlIGNsYXNzIG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlU3lzdGVtVXRpbHMgaGFzIGJlZW4gZGVwcmVjYXRlZC4KVXNlIGVxdWl2YWxlbnQgbWV0aG9kcyBpbiBqYXZhLm5pby5maWxlLkZpbGVTdG9yZSBpbnN0ZWFkLCBlLmcuCkZpbGVzLmdldEZpbGVTdG9yZShQYXRocy5nZXQoIi9ob21lIikpLmdldFVzYWJsZVNwYWNlKCkgb3IgaXRlcmF0ZSBvdmVyCkZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKS5nZXRGaWxlU3RvcmVzKCkuCgoKQ09NUEFUSUJJTElUWSBXSVRIIEpBVkEgOQo9PT09PT09PT09PT09PT09PT0KClRoZSBNQU5JRkVTVC5NRiBub3cgY29udGFpbnMgYW4gYWRkaXRpb25hbCBlbnRyeToKCiAgQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuYXBhY2hlLmNvbW1vbnMuaW8KClRoaXMgc2hvdWxkIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIENvbW1vbnMgSU8gMi42IGFzIGEgbW9kdWxlIGluIHRoZSBKYXZhIDkKbW9kdWxlIHN5c3RlbS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBjb3JyZXNwb25kaW5nIGlzc3VlOgoKICAgIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8tNTUxCgpCdWlsZGluZyBDb21tb25zIElPIDIuNiBzaG91bGQgd29yayBvdXQgb2YgdGhlIGJveCB3aXRoIHRoZSBsYXRlc3QgSmF2YSA5CnJlbGVhc2UuIFBsZWFzZSByZXBvcnQgYW55IEphdmEgOSByZWxhdGVkIGlzc3VlcyBhdDoKCiAgICBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPCgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PQoKbyBJTy01NTE6IEFkZCBBdXRvbWF0aWMtTW9kdWxlLU5hbWUgTUFOSUZFU1QgZW50cnkgZm9yIEphdmEgOSBjb21wYXRpYmlsaXR5LgpvIElPLTM2NzogQWRkIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGNvcHlUb0RpcmVjdG9yeS4gVGhhbmtzIHRvIEphbWVzIFNhd2xlLgpvIElPLTQ5MzogQWRkIGluZmluaXRlIGNpcmN1bGFyIGlucHV0IHN0cmVhbS4gVGhhbmtzIHRvIFBpb3RyIFR1cnNraS4KbyBJTy01MDc6IEFkZCBhIEJ5dGVPcmRlclV0aWxzIGNsYXNzLgpvIElPLTUxODogQWRkIE9ic2VydmFibGVJbnB1dFN0cmVhbS4KbyBJTy01MTk6IEFkZCBNZXNzYWdlRGlnZXN0Q2FsY3VsYXRpbmdJbnB1dFN0cmVhbS4KbyBJTy01MTM6IEFkZCBjb252ZW5pZW5jZSBtZXRob2RzIGZvciByZWFkaW5nIGNsYXNzIHBhdGggcmVzb3VyY2VzLgogICAgICAgICAgVGhhbmtzIHRvIEJlaHJhbmcgU2FlZWR6YWRlaC4KCkZJWEVEIEJVR1MKPT09PT09PT09PQoKbyBJTy01NDY6IENsb3NlZE91dHB1dFN0cmVhbSNmbHVzaCBzaG91bGQgdGhyb3cuIFRoYW5rcyB0byBUb21hcyBDZWxheWEuCm8gSU8tNTUwOiBEb2N1bWVudGF0aW9uIGlzc3VlLCBmaXggNDA0IEphdmFkb2MgaXNzdWVzIGluIHRoZSBkZXNjcmlwdGlvbiBwYWdlLgogICAgICAgICAgVGhhbmtzIHRvIEppbWkgQWRyaWFuLgpvIElPLTQ0MjogSmF2YWRvYyBjb250cmFkaWN0b3J5IGZvciBGaWxlRmlsdGVyVXRpbHMuYWdlRmlsZUZpbHRlcihjdXRvZmYpIGFuZAogICAgICAgICAgdGhlIGZpbHRlciBpdCBjb25zdHJ1Y3RzOiBBZ2VGaWxlRmlsdGVyKGN1dG9mZikuCiAgICAgICAgICBUaGFua3MgdG8gU2ltb24gUm9iaW5zb24uCm8gSU8tNTM0OiBGaWxlVXRpbFRlc3RDYXNlLnRlc3RGb3JjZURlbGV0ZURpcigpIHNob3VsZCBub3QgZGVsZXRlIHRlc3REaXJlY3RvcnkKICAgICAgICAgIHBhcmVudC4KbyBJTy01Mjg6IEZpeCBUYWlsZXIucnVuIHJhY2UgY29uZGl0aW9uIHJ1bmF3YXkgbG9nZ2luZy4gVGhhbmtzIHRvIERhdmUgTW90ZW4uCm8gSU8tNDgzOiBnZXRQcmVmaXhMZW5ndGggcmV0dXJuIC0xIGlmIHVuaXggZmlsZSBjb250YWlucyBjb2xvbi4KICAgICAgICAgIFRoYW5rcyB0byBNYXJrbyBWYXNpYy4KbyBJTy01MjA6IEZpbGVVdGlsc1Rlc3RDYXNlI3Rlc3RDb250ZW50RXF1YWxzSWdub3JlRU9MIGZhaWxzIG9uIFdpbmRvd3MuCm8gSU8tNTE2OiAuZ2l0YXR0cmlidXRlcyBub3QgY29ycmVjdGx5IGFwcGxpZWQuIFRoYW5rcyB0byBKYXNvbiBQeWVyb24uCm8gSU8tNTE1OiBBbGxvdyBTcGVjaWZ5aW5nIEluaXRpYWwgQnVmZmVyIFNpemUgb2YgRGVmZXJyZWRGaWxlT3V0cHV0U3RyZWFtLgogICAgICAgICAgVGhhbmtzIHRvIEJyZXR0IExvdW5zYnVyeSwgR2FyeSBHcmVnb3J5LgpvIElPLTUxMjogVGhyZXNob2xkaW5nT3V0cHV0U3RyZWFtLnRocmVzaG9sZFJlYWNoZWQoKSByZXN1bHRzIGluCiAgICAgICAgICBGaWxlTm90Rm91bmRFeGNlcHRpb24uIFRoYW5rcyB0byBSYWxmIEhhdXNlci4KbyBJTy01MTE6IEFmdGVyIGEgZmV3IHVuaXQgdGVzdHMsIGEgZmV3IG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3JpZXMgbm90IGNsZWFuZWQKICAgICAgICAgIGNvbXBsZXRlbHkuIFRoYW5rcyB0byBBaG1ldCBDZWxpay4KbyBJTy01MDI6IEV4Y2VwdGlvbnMgYXJlIHN1cHByZXNzZWQgaW5jb3JyZWN0bHkgd2hlbiBjb3B5aW5nIGZpbGVzLgogICAgICAgICAgVGhhbmtzIHRvIENocmlzdGlhbiBTY2h1bHRlLgpvIElPLTUwMzogVXBkYXRlIHBsYXRmb3JtIHJlcXVpcmVtZW50IHRvIEphdmEgNy4KbyBJTy01Mzc6IEJPTUlucHV0U3RyZWFtIHNob3VsZG4ndCBzb3J0IGFycmF5IG9mIEJPTXMgaW4tcGxhY2UuCiAgICAgICAgICBUaGFua3MgdG8gQm9yeXMgWmlicm92LgoKQ0hBTkdFUwo9PT09PT09CgpvIElPLTU1MzogTWFrZSBjb2RlIHN0eWxlIG9mIGhhc0JPTSgpIGNvbnNpc3RlbnQgd2l0aCBnZXRCT01DaGFyc2V0TmFtZSgpLgogICAgICAgICAgVGhhbmtzIHRvIE1pY2hhZWwgRXJuc3QuCm8gSU8tNTQyOiBGaWxlVXRpbHMjcmVhZEZpbGVUb0J5dGVBcnJheTogb3B0aW1pemUgcmVhZGluZyBvZiBmaWxlcyB3aXRoIGtub3duCiAgICAgICAgICBzaXplLiBUaGFua3MgdG8gSWxtYXJzIFBvaWthbnMuCm8gSU8tNTQ3OiBUaHJvdyBhIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpbnN0ZWFkIG9mIE51bGxQb2ludGVyRXhjZXB0aW9uIGluCiAgICAgICAgICBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlV2luZG93cygpLiBUaGFua3MgdG8gTmlraGlsIFNoaW5kZSwKICAgICAgICAgIE1pY2hhZWwgRXJuc3QsIEdhcnkgR3Jlb3J5LgpvIElPLTUwNjogRGVwcmVjYXRlIG1ldGhvZHMgRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZUtiKCkuCiAgICAgICAgICBUaGFua3MgdG8gQ2hyaXN0aWFuIFNjaHVsdGUuCm8gSU8tNTA1OiBNYWtlIExpbmVJdGVyYXRvciBpbXBsZW1lbnQgQ2xvc2VhYmxlIHRvIHN1cHBvcnQgdHJ5LXdpdGgtcmVzb3VyY2VzCiAgICAgICAgICBzdGF0ZW1lbnRzLiBUaGFua3MgdG8gQ2hyaXN0aWFuIFNjaHVsdGUuCm8gSU8tNTA0OiBEZXByZWNhdGVkIG9mIGFsbCBJT1V0aWxzLmNsb3NlUXVpZXRseSgpIG1ldGhvZHMgYW5kIHVzZQogICAgICAgICAgdHJ5LXdpdGgtcmVzb3VyY2VzIGludGVybmFsbHkuIFRoYW5rcyB0byBDaHJpc3RpYW4gU2NodWx0ZS4KClJFTU9WRUQKPT09PT09PQoKbyBJTy01MTQ6IFJlbW92ZSBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSmF2YTdTdXBwb3J0LgoKQ09NUEFUSUJJTElUWSBXSVRIIE9MREVSIFZFUlNJT05TCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuNToKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IFllcy4KU2VtYW50aWMgY29tcGF0aWJsZTogWWVzLgoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuNiBhbmQgMS40OgpCaW5hcnkgY29tcGF0aWJsZTogWWVzLgpTb3VyY2UgY29tcGF0aWJsZTogTm8sIHNlZSB0aGUgcmFyZSBjYXNlIGluCiAgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy0zMTguClNlbWFudGljIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbgogIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8tMzE4LgoKQ29tbW9ucyBJTyAyLjYgcmVxdWlyZXMgSmF2YSA3IG9yIGxhdGVyLgpDb21tb25zIElPIDIuNSByZXF1aXJlcyBKYXZhIDYgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMi40IHJlcXVpcmVzIEphdmEgNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSmF2YSA2IG9yIGxhdGVyLgpDb21tb25zIElPIDIuMiByZXF1aXJlcyBKYXZhIDUgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIEphdmEgMS4zIG9yIGxhdGVyLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMi41Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpOZXcgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcy4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gSU8tNDg3OiAgQWRkIFZhbGlkYXRpbmdPYmplY3RJbnB1dFN0cmVhbSBmb3IgY29udHJvbGxlZCBkZXNlcmlhbGl6YXRpb24gCm8gSU8tNDcxOiAgU3VwcG9ydCBmb3IgYWRkaXRpb25hbCBlbmNvZGluZ3MgaW4gUmV2ZXJzZWRMaW5lc0ZpbGVSZWFkZXIgVGhhbmtzIHRvIExlYW5kcm8gUmVpcy4gCm8gSU8tNDI1OiAgU2V0dGVyIG1ldGhvZCBmb3IgdGhyZXNob2xkIG9uIFRocmVzaG9sZGluZ091dHB1dFN0cmVhbSBUaGFua3MgdG8gQ3JhaWcgU3dhbmsuIApvIElPLTQwNjogIEludHJvZHVjZSBuZXcgY2xhc3MgQXBwZW5kYWJsZU91dHB1dFN0cmVhbSBUaGFua3MgdG8gTmlhbGwgUGVtYmVydG9uLiAKbyBJTy00NTk6ICBBZGQgV2luZG93c0xpbmVFbmRpbmdJbnB1dFN0cmVhbSBhbmQgVW5peExpbmVFbmRpbmdJbnB1dFN0cmVhbS4gVGhhbmtzIHRvIEtyaXN0aWFuIFJvc2Vudm9sZC4gCm8gSU8tNDU3OiAgQWRkIGEgQm91bmRlZFJlYWRlciwgYSB3cmFwcGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uc3RyYWluIGFjY2VzcwogICAgICAgIHRvIGFuIHVuZGVybHlpbmcgc3RyZWFtIHdoZW4gdXNlZCB3aXRoIG1hcmsvcmVzZXQgLQogICAgICAgIHRvIGF2b2lkIG92ZXJmbG93aW5nIHRoZSBtYXJrIGxpbWl0IG9mIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4gVGhhbmtzIHRvIEtyaXN0aWFuIFJvc2Vudm9sZC4gCm8gSU8tNDI2OiAgQWRkIEFQSSBJT1V0aWxzLmNsb3NlUXVpZXRseShDbG9zZWFibGUuLi4pIApvIElPLTQxMDogIFJlYWRmdWxseSgpIFRoYXQgUmV0dXJucyBBIEJ5dGUgQXJyYXkgVGhhbmtzIHRvIEJlbHVnYSBCZWhyLiAKbyBJTy0zOTU6ICBPdmVybG9hZCBJT1V0aWxzIGJ1ZmZlciBtZXRob2RzIHRvIGFjY2VwdCBidWZmZXIgc2l6ZSBUaGFua3MgdG8gQmVsdWdhIEJlaHIuIApvIElPLTM4MjogIENodW5rZWQgSU8gZm9yIGxhcmdlIGFycmF5cy4KICAgICAgICAgQWRkZWQgd3JpdGVDaHVua2VkKGJ5dGVbXSwgT3V0cHV0U3RyZWFtKSBhbmQgd3JpdGVDaHVua2VkKGNoYXJbXSBXcml0ZXIpCiAgICAgICAgIEFkZGVkIENodW5rZWRPdXRwdXRTdHJlYW0sIENodW5rZWRXcml0ZXIgCm8gSU8tMjMzOiAgQWRkIE1ldGhvZHMgZm9yIEJ1ZmZlcmluZyBTdHJlYW1zL1dyaXRlcnMgVG8gSU9VdGlscwogICAgICAgICBBZGRlZCBvdmVybG9hZGVkIGJ1ZmZlcigpIG1ldGhvZHMgLSBzZWUgYWxzbyBJTy0zMzAgCm8gSU8tMzMwOiAgSU9VdGlscyN0b0J1ZmZlcmVkT3V0cHV0U3RyZWFtL3RvQnVmZmVyZWRXcml0ZXIgdG8gY29uZGl0aW9uYWxseSB3cmFwIHRoZSBvdXRwdXQKICAgICAgICAgQWRkZWQgb3ZlcmxvYWRlZCBidWZmZXIoKSBtZXRob2RzIC0gc2VlIGFsc28gSU8tMjMzIApvIElPLTM4MTogIEFkZCBGaWxlVXRpbHMuY29weUlucHV0U3RyZWFtVG9GaWxlIEFQSSB3aXRoIG9wdGlvbiB0byBsZWF2ZSB0aGUgc291cmNlIG9wZW4uCiAgICAgICAgU2VlIGNvcHlJbnB1dFN0cmVhbVRvRmlsZShmaW5hbCBJbnB1dFN0cmVhbSBzb3VyY2UsIGZpbmFsIEZpbGUgZGVzdGluYXRpb24sIGJvb2xlYW4gY2xvc2VTb3VyY2UpIApvIElPLTM3OTogIENoYXJTZXF1ZW5jZUlucHV0U3RyZWFtIC0gYWRkIHRlc3RzIGZvciBhdmFpbGFibGUoKQogICAgICAgICBGaXggY29kZSBzbyBpdCByZWFsbHkgZG9lcyByZWZsZWN0IGEgbWluaW11bSBhdmFpbGFibGUuIApvIElPLTM0NjogIEFkZCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0udG9JbnB1dFN0cmVhbSgpIApvIElPLTM0MTogIEEgY29uc3RhbnQgZm9yIGhvbGRpbmcgdGhlIEJPTSBjaGFyYWN0ZXIgKFUrRkVGRikgCm8gSU8tMzYxOiAgQWRkIEFQSSBGaWxlVXRpbHMuZm9yY2VNa2RpcnNQYXJlbnQoKS4gCm8gSU8tMzYwOiAgQWRkIEFQSSBDaGFyc2V0cy5yZXF1aXJlZENoYXJzZXRzKCkuIApvIElPLTM1OTogIEFkZCBJT1V0aWxzLnNraXAgYW5kIHNraXBGdWxseShSZWFkYWJsZUJ5dGVDaGFubmVsLCBsb25nKS4gVGhhbmtzIHRvIHl1a29iYS4gCm8gSU8tMzU4OiAgQWRkIElPVXRpbHMucmVhZCBhbmQgcmVhZEZ1bGx5KFJlYWRhYmxlQnl0ZUNoYW5uZWwsIEJ5dGVCdWZmZXIgYnVmZmVyKS4gVGhhbmtzIHRvIHl1a29iYS4gCm8gSU8tMzUzOiAgQWRkIEFQSSBJT1V0aWxzLmNvcHkoSW5wdXRTdHJlYW0sIE91dHB1dFN0cmVhbSwgaW50KSBUaGFua3MgdG8gZ2dyZWdvcnkuIApvIElPLTM0OTogIEFkZCBBUEkgd2l0aCBhcnJheSBvZmZzZXQgYW5kIGxlbmd0aCBhcmd1bWVudCB0byBGaWxlVXRpbHMud3JpdGVCeXRlQXJyYXlUb0ZpbGUuIFRoYW5rcyB0byBzY29wLiAKbyBJTy0zNDg6ICBNaXNzaW5nIGluZm9ybWF0aW9uIGluIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB0aHJvd24gYnkgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlscyN2YWxpZGF0ZUxpc3RGaWxlc1BhcmFtZXRlcnMuIFRoYW5rcyB0byBwbGNzdHBpZXJyZS4gCm8gSU8tMzQ1OiAgU3VwcGx5IGEgaG9vayBtZXRob2QgYWxsb3dpbmcgVGFpbGVyIGFjdGl2ZWx5IGRldGVybWluaW5nIHN0b3AgY29uZGl0aW9uLiBUaGFua3MgdG8gbWtyZXNzZS4gCm8gSU8tNDM3OiAgTWFrZSBJT1V0aWxzLkVPRiBwdWJsaWMgYW5kIHJldXNlIGl0IGluIHZhcmlvdXMgY2xhc3Nlcy4gCgpGaXhlZCBCdWdzOgpvIElPLTQ0NjogIGFkZHMgYW4gZW5kT2ZGaWxlUmVhY2hlZCBtZXRob2QgdG8gdGhlIFRhaWxlckxpc3RlbmVyIFRoYW5rcyB0byBKZWZmcmV5IEJhcnJ1cy4gCm8gSU8tNDg0OiAgRmlsZW5hbWVVdGlscyBzaG91bGQgaGFuZGxlIGVtYmVkZGVkIG51bGwgYnl0ZXMgVGhhbmtzIHRvIFBoaWxpcHBlIEFydGVhdS4gCm8gSU8tNDgxOiAgQ2hhbmdlZC9Db3JyZWN0ZWQgYWxnb3JpdGhtIGZvciB3YWl0Rm9yIApvIElPLTQyODogIEJPTUlucHV0U3RyZWFtLnNraXAgcmV0dXJucyB3cm9uZyBjb3VudCBpZiBzdHJlYW0gY29udGFpbnMgbm8gQk9NIFRoYW5rcyB0byBTdGVmYW4gR21laW5lci4gCm8gSU8tNDg4OiAgRmlsZVV0aWxzLndhaXRGb3IoLi4uKSBzd2FsbG93cyB0aHJlYWQgaW50ZXJydXB0ZWQgc3RhdHVzIFRoYW5rcyB0byBCavZybiBCdWNobmVyLiAKbyBJTy00NTI6ICBTdXBwb3J0IGZvciBzeW1saW5rcyB3aXRoIG1pc3NpbmcgdGFyZ2V0LiBBZGRlZCBzdXBwb3J0IGZvciBKREs3IHN5bWxpbmsgZmVhdHVyZXMgd2hlbiBwcmVzZW50IFRoYW5rcyB0byBEYXZpZCBTdGFuZGlzaC4gCm8gSU8tNDUzOiAgUmVncmVzc2lvbiBpbiBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyBmcm9tIDIuMC4xIFRoYW5rcyB0byBTdGV2ZW4gQ2hyaXN0b3UuIApvIElPLTQ1MTogIGFudCB0ZXN0IGZhaWxzIC0gcmVzb3VyY2VzIG1pc3NpbmcgZnJvbSB0ZXN0IGNsYXNzcGF0aCBUaGFua3MgdG8gRGF2aWQgU3RhbmRpc2guIApvIElPLTQzNTogIERvY3VtZW50IHRoYXQgRmlsZVV0aWxzLmRlbGV0ZURpcmVjdG9yeSwgZGlyZWN0b3J5Q29udGFpbnMgYW5kIGNsZWFuRGlyZWN0b3J5CiAgICAgICAgIG1heSB0aHJvdyBhbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaW4gY2FzZSB0aGUgcGFzc2VkIGRpcmVjdG9yeSBkb2VzIG5vdAogICAgICAgICBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkuIFRoYW5rcyB0byBEb21pbmlrIFN0YWRsZXIuIApvIElPLTQyNDogIEphdmFkb2MgZml4ZXMsIG1vc3RseSB0byBhcHBlYXNlIDEuOC4wIFRoYW5rcyB0byBWaWxsZSBTa3l0dOQuIApvIElPLTM4OTogIEZpbGVVdGlscy5zaXplT2ZEaXJlY3RvcnkgY2FuIHRocm93IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBUaGFua3MgdG8gQXVzdGluIERvdXBuaWsuIApvIElPLTM5MDogIEZpbGVVdGlscy5zaXplT2ZEaXJlY3RvcnlBc0JpZ0ludGVnZXIgY2FuIG92ZXJmbG93LgogICAgICAgICBFbnN1cmUgdGhhdCByZWN1cnNpdmUgY2FsbHMgYWxsIHVzZSBCaWdJbnRlZ2VyIApvIElPLTM4NTogIEZpbGVVdGlscy5kb0NvcHlGaWxlIGNhbiBwb3RlbnRpYWxseSBsb29wIGZvciBldmVyCiAgICAgICAgIEV4aXQgbG9vcCBpZiBubyBkYXRhIHRvIGNvcHkgCm8gSU8tMzgzOiAgRmlsZVV0aWxzLmRvQ29weUZpbGUgY2FjaGVzIHRoZSBmaWxlIHNpemU7IG5lZWRzIHRvIGJlIGRvY3VtZW50ZWQKICAgICAgICAgQWRkZWQgSmF2YWRvYzsgc2hvdyBmaWxlIGxlbmd0aHMgaW4gZXhjZXB0aW9uIG1lc3NhZ2UgCm8gSU8tMzgwOiAgRmlsZVV0aWxzLmNvcHlJbnB1dFN0cmVhbVRvRmlsZSBzaG91bGQgZG9jdW1lbnQgaXQgY2xvc2VzIHRoZSBpbnB1dCBzb3VyY2UgVGhhbmtzIHRvIGNsYXVkaW9fY2guIApvIElPLTI3OTogIFRhaWxlciBlcnJvbmVvdXNseSBjb25zaWRlcnMgZmlsZSBhcyBuZXcuCiAgICAgICAgRml4IHRvIHVzZSBmaWxlLmxhc3RNb2RpZmllZCgpIHJhdGhlciB0aGFuIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIApvIElPLTM1NjogIENoYXJTZXF1ZW5jZUlucHV0U3RyZWFtI3Jlc2V0KCkgYmVoYXZlcyBpbmNvcnJlY3RseSBpbiBjYXNlIHdoZW4gYnVmZmVyIHNpemUgaXMgbm90IGRpdmlkYWJsZSBieSBkYXRhIHNpemUuCiAgICAgICAgIEZpeCBjb2RlIHNvIHNraXAgcmVsYXRlcyB0byB0aGUgZW5jb2RlZCBieXRlczsgcmVzZXQgbm93IHJlLWVuY29kZXMgdGhlIGRhdGEgdXAgdG8gdGhlIHBvaW50IG9mIHRoZSBtYXJrIApvIElPLTM2ODogIENsYXNzTG9hZGVyT2JqZWN0SW5wdXRTdHJlYW0gZG9lcyBub3QgaGFuZGxlIHByaW1pdGl2ZSB0eXBlZCBtZW1iZXJzIApvIElPLTMxNDogIERlcHJlY2F0ZSBhbGwgbWV0aG9kcyB0aGF0IHVzZSB0aGUgZGVmYXVsdCBlbmNvZGluZyAKbyBJTy0zMzg6ICBXaGVuIGEgZmlsZSBpcyByb3RhdGVkLCBmaW5pc2ggcmVhZGluZyBwcmV2aW91cyBmaWxlIHByaW9yIHRvIHN0YXJ0aW5nIG5ldyBvbmUgCm8gSU8tMzU0OiAgQ29tbW9ucyBJTyBUYWlsZXIgZG9lcyBub3QgcmVzcGVjdCBVVEYtOCBDaGFyc2V0LiAKbyBJTy0zMjM6ICBXaGF0IHNob3VsZCBoYXBwZW4gaW4gRmlsZVV0aWxzLnNpemVPZltEaXJlY3RvcnldIHdoZW4gYW4gb3ZlcmZsb3cgdGFrZXMgcGxhY2U/CiAgICAgICAgQWRkZWQgSmF2YWRvYy4gCm8gSU8tMzcyOiAgRmlsZVV0aWxzLm1vdmVEaXJlY3RvcnkgY2FuIHByb2R1Y2UgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUKbyBJTy0zNjI6ICBJT1V0aWxzLmNvbnRlbnRFcXVhbHMqIG1ldGhvZHMgcmV0dXJucyBmYWxzZSBpZiBpbnB1dDEgPT0gaW5wdXQyLCBzaG91bGQgcmV0dXJuIHRydWUuIFRoYW5rcyB0byBtbWFkc29uLCBnZ3JlZ29yeS4gCm8gSU8tMzU3OiAgW1RhaWxlcl0gSW50ZXJydXB0ZWRFeGNlcHRpb24gd2hpbGUgdGhlIHRocmVhZCBpcyBzbGVlcGluZyBpcyBzaWxlbnRseSBpZ25vcmVkIFRoYW5rcyB0byBtb3J0ZW5oLiAKbyBJTy0zNTI6ICBTcGVsbGluZyBmaXhlcy4gVGhhbmtzIHRvIHNjb3AuIApvIElPLTQzNjogIEltcHJvcGVyIEphdmFkb2MgY29tbWVudCBmb3IgRmlsZW5hbWVVdGlscy5pbmRleE9mRXh0ZW5zaW9uLiBUaGFua3MgdG8gY2hyaXN0b3BoLnNjaG5lZWdhbnMuIAoKQ2hhbmdlczoKbyBJTy00MzM6ICBDb252ZXJ0ZWQgYWxsIHRlc3RjYXNlcyB0byBKVW5pdCA0IApvIElPLTQ2NjogIEFkZGVkIHRlc3RjYXNlIHRvIHNob3cgdGhpcyB3YXMgZml4ZWQgd2l0aCBJTy00MjMgCm8gSU8tNDc5OiAgQ29ycmVjdCBleGNlcHRpb24gbWVzc2FnZSBpbiBGaWxlVXRpbHMuZ2V0RmlsZShGaWxlLCBTdHJpbmcuLi4pIFRoYW5rcyB0byBaaG91Y2UgQ2hlbi4gCm8gSU8tNDY1OiAgVXBkYXRlIHRvIEpVbml0IDQuMTIgVGhhbmtzIHRvIGJhc2VkMi4gCm8gSU8tNDYyOiAgSU9FeGNlcHRpb25XaXRoQ2F1c2Ugbm8gbG9uZ2VyIG5lZWRlZCAKbyBJTy00MjI6ICBEZXByZWNhdGUgQ2hhcnNldHMgQ2hhcnNldCBjb25zdGFudHMgaW4gZmF2b3Igb2YgSmF2YSA3J3MgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzIApvIElPLTIzOTogIENvbnZlcnQgSU9DYXNlIHRvIGEgSmF2YSAxLjUrIEVudW1lcmF0aW9uCiAgICAgICAgIFtOLkIuIHRoaXMgaXMgYmluYXJ5IGNvbXBhdGlibGVdIApvIElPLTMyODogIGdldFByZWZpeExlbmd0aCByZXR1cm5zIG51bGwgaWYgZmlsZW5hbWUgaGFzIGxlYWRpbmcgc2xhc2hlcwogICAgICAgIEphdmFkb2M6IGFkZCBleGFtcGxlcyB0byBzaG93IGNvcnJlY3QgYmVoYXZpb3I7IGFkZCB1bml0IHRlc3RzIApvIElPLTI5OTogIEZpbGVVdGlscy5saXN0RmlsZXNBbmREaXJzIGluY2x1ZGVzIG9yaWdpbmFsIGRpciBpbiByZXN1bHRzIGV2ZW4gd2hlbiBpdCBkb2Vzbid0IG1hdGNoIGZpbHRlcgogICAgICAgIEphdmFkb2M6IGNsYXJpZnkgdGhhdCBvcmlnaW5hbCBkaXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdHMgCm8gSU8tMzc1OiAgRmlsZW5hbWVVdGlscy5zcGxpdE9uVG9rZW5zKFN0cmluZyB0ZXh0KSBjaGVjayBmb3IgJyoqJyBjb3VsZCBiZSBzaW1wbGlmaWVkIApvIElPLTM3NDogIFdpbGRjYXJkRmlsZUZpbHRlciBjdG9ycyBzaG91bGQgbm90IHVzZSBudWxsIHRvIG1lYW4gSU9DYXNlLlNFTlNJVElWRSB3aGVuIGRlbGVnYXRpbmcgdG8gb3RoZXIgY3RvcnMgCgpDb21wYXRpYmlsaXR5IHdpdGggMi40OgpCaW5hcnkgY29tcGF0aWJsZTogWWVzLgpTb3VyY2UgY29tcGF0aWJsZTogWWVzLgpTZW1hbnRpYyBjb21wYXRpYmxlOiBZZXMuCgpDb21wYXRpYmlsaXR5IHdpdGggMi4yIGFuZCAxLjQ6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBObywgc2VlIHRoZSByYXJlIGNhc2UgaW4gaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy0zMTguClNlbWFudGljIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KCkNvbW1vbnMgSU8gMi41IHJlcXVpcmVzIEphdmEgNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjQgcmVxdWlyZXMgSmF2YSA2IG9yIGxhdGVyLgpDb21tb25zIElPIDIuMyByZXF1aXJlcyBKYXZhIDYgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMi4yIHJlcXVpcmVzIEphdmEgNSBvciBsYXRlci4KQ29tbW9ucyBJTyAxLjQgcmVxdWlyZXMgSmF2YSAxLjMgb3IgbGF0ZXIuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIElPLTI2OTogIFRhaWxlciBsb2NrcyBmaWxlIGZyb20gZGVsZXRpb24vcmVuYW1lIG9uIFdpbmRvd3MuIFRoYW5rcyB0bwpzZWJiLgpvIElPLTMzMzogIEV4cG9ydCBPU0dpIHBhY2thZ2VzIGF0IHZlcnNpb24gMS54IGluIGFkZGl0aW9uIHRvIDIueC4gVGhhbmtzCnRvIGZtZXNjaGJlLgpvIElPLTMyMDogIEFkZCBYbWxTdHJlYW1SZWFkZXIgc3VwcG9ydCBmb3IgVVRGLTMyLiBUaGFua3MgdG8gZ2dyZWdvcnkuCm8gSU8tMzMxOiAgQk9NSW5wdXRTdHJlYW0gd3JvbmdseSBkZXRlY3RzIFVURi0zMkxFX0JPTSBmaWxlcyBhcwpVVEYtMTZMRV9CT00gZmlsZXMgaW4gbWV0aG9kIGdldEJPTSgpLiBUaGFua3MgdG8gZ2dyZWdvcnkuCm8gSU8tMzI3OiAgQWRkIGJ5dGVDb3VudFRvRGlzcGxheVNpemUoQmlnSW50ZWdlcikuIFRoYW5rcyB0byBnZ3JlZ29yeS4KbyBJTy0zMjY6ICBBZGQgbmV3IEZpbGVVdGlscy5zaXplT2ZbRGlyZWN0b3J5XSBBUElzIHRvIHJldHVybiBCaWdJbnRlZ2VyLgpUaGFua3MgdG8gZ2dyZWdvcnkuCm8gSU8tMzI1OiAgQWRkIElPVXRpbHMudG9CeXRlQXJyYXkgbWV0aG9kcyB0byB3b3JrIHdpdGggVVJMIGFuZCBVUkkuIFRoYW5rcwp0byByYXZpcHJhay4KbyBJTy0zMjQ6ICBBZGQgbWlzc2luZyBDaGFyc2V0IHNpc3RlciBBUElzIHRvIG1ldGhvZCB0aGF0IHRha2UgYSBTdHJpbmcKY2hhcnNldCBuYW1lLiBUaGFua3MgdG8gcmF2aXByYWsuCgpGaXhlZCBCdWdzOgpvIElPLTMzNjogIFlvdHRhYnl0ZSAoWUIpIGluY29ycmVjdGx5IGRlZmluZWQgaW4gRmlsZVV0aWxzLiBUaGFua3MgdG8KcmxlYXZlbGxlLgpvIElPLTI3OTogIFRhaWxlciBlcnJvbmVvdXNseSBjb25zaWRlcnMgZmlsZSBhcyBuZXcuIFRoYW5rcyB0byBTZXJnaW8KQm9zc2EsIENocmlzIEJhcm9uLgpvIElPLTMzNTogIFRhaWxlciNyZWFkTGluZXMgLSBpbmNvcnJlY3QgQ1IgaGFuZGxpbmcuCm8gSU8tMzM0OiAgRmlsZVV0aWxzLnRvVVJMcyB0aHJvd3MgTlBFIGZvciBudWxsIHBhcmFtZXRlcjsgZG9jdW1lbnQgdGhlCmJlaGF2aW9yLgpvIElPLTMzMjogIEltcHJvdmUgdGFpbGVyJ3MgcmVhZGluZyBwZXJmb3JtYW5jZS4gVGhhbmtzIHRvIGxpYW5nbHkuCm8gSU8tMjc5OiAgSW1wcm92ZSBUYWlsZXIgcGVyZm9ybWFuY2Ugd2l0aCBidWZmZXJlZCByZWFkcyAoc2VlIElPLTMzMikuCm8gSU8tMzI5OiAgRmlsZVV0aWxzLndyaXRlTGluZXMgdXNlcyB1bmJ1ZmZlcmVkIElPLiBUaGFua3MgdG8gdGl2di4KbyBJTy0zMTk6ICBGaWxlVXRpbHMuc2l6ZU9mRGlyZWN0b3J5IGZvbGxvd3Mgc3ltYm9saWMgbGlua3MuIFRoYW5rcyB0bwpyYXZpcHJhay4KCgpDb21wYXRpYmlsaXR5IHdpdGggMi4zOgpCaW5hcnkgY29tcGF0aWJsZTogWWVzLgpTb3VyY2UgY29tcGF0aWJsZTogWWVzLgpTZW1hbnRpYyBjb21wYXRpYmxlOiBZZXMuCgpDb21wYXRpYmlsaXR5IHdpdGggMi4yIGFuZCAxLjQ6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBObywgc2VlIHRoZSByYXJlIGNhc2UgaW4gaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy0zMTguClNlbWFudGljIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KCkNvbW1vbnMgSU8gMi40IHJlcXVpcmVzIEphdmEgNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSmF2YSA2IG9yIGxhdGVyLgpDb21tb25zIElPIDIuMiByZXF1aXJlcyBKYXZhIDUgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIEphdmEgMS4zIG9yIGxhdGVyLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMi4zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBJTy0zMjI6ICBBZGQgYW5kIHVzZSBjbGFzcyBDaGFyc2V0cy4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBJTy0zMjE6ICBCeXRlT3JkZXJNYXJrIFVURl8zMkxFIGlzIGluY29ycmVjdC4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBJTy0zMTg6ICBBZGQgQ2hhcnNldCBzaXN0ZXIgQVBJcyB0byBtZXRob2QgdGhhdCB0YWtlIGEgU3RyaW5nIGNoYXJzZXQgbmFtZS4gVGhhbmtzIHRvIGdncmVnb3J5LiAKCkNvbXBhdGliaWxpdHkgd2l0aCAyLjIgYW5kIDEuNDoKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KU2VtYW50aWMgY29tcGF0aWJsZTogTm8sIHNlZSB0aGUgcmFyZSBjYXNlIGluIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8tMzE4LgoKQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSmF2YSA2IG9yIGxhdGVyLgpDb21tb25zIElPIDIuMiByZXF1aXJlcyBKYXZhIDUgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIEphdmEgMS4zIG9yIGxhdGVyLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMi4yCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBBZGQgSU9VdGlscy50b0J1ZmZlcmVkUmVhZGVyKFJlYWRlcikgIElzc3VlOiBJTy0zMTMuIFRoYW5rcyB0byBnZ3JlZ29yeS4KbyBBbGxvdyBhcHBsaWNhdGlvbnMgdG8gcHJvdmlkZSBidWZmZXIgKG9yIHNpemUpIGZvciBjb3B5TGFyZ2UgbWV0aG9kcy4gIElzc3VlOiBJTy0zMDguIFRoYW5rcyB0byBNYW5vaiBNb2thc2hpLiAKbyBOZXcgY29weUxhcmdlKCkgbWV0aG9kIGluIElPVXRpbHMgdGhhdCB0YWtlcyBhZGRpdGlvbmFsIG9mZnNldCwgbGVuZ3RoIGFyZ3VtZW50cyAgSXNzdWU6IElPLTMwNS4gVGhhbmtzIHRvIE1hbm9qIE1va2FzaGkuIApvIFVzZSB0ZXJhYnl0ZSAoVEIpLCBwZXRhYnl0ZSAoUEIpIGFuZCBleGFieXRlIChFQikgaW4gRmlsZVV0aWxzLmJ5dGVDb3VudFRvRGlzcGxheVNpemUobG9uZyBzaXplKSAgSXNzdWU6IElPLTI4Ny4gVGhhbmtzIHRvIFJvbiBLdXJpcywgR2FyeSBHcmVnb3J5LiAKbyBGaWxlVXRpbHMubGlzdEZpbGVzKCkgZG9lc24ndCByZXR1cm4gZGlyZWN0b3JpZXMgIElzc3VlOiBJTy0xNzMuIFRoYW5rcyB0byBNYXJjb3MgVmlu7WNpdXMgZGEgU2lsdmEuIApvIENoYXJTZXF1ZW5jZUlucHV0U3RyZWFtIHRvIGVmZmljaWVudGx5IHN0cmVhbSBjb250ZW50IG9mIGEgQ2hhclNlcXVlbmNlICBJc3N1ZTogSU8tMjk3LiBUaGFua3MgdG8gT2xlZyBLYWxuaWNoZXZza2kuIApvIFRoZSBzZWNvbmQgY29uc3RydWN0b3Igb2YgVGFpbGVyIGNsYXNzIGRvZXMgbm90IHBhc3MgJ2RlbGF5JyB0byB0aGUgdGhpcmQgb25lICBJc3N1ZTogSU8tMzA0LiBUaGFua3MgdG8gbGlhbmdseS4gCm8gVGVlT3V0cHV0U3RyZWFtIGRvZXMgbm90IGNhbGwgYnJhbmNoLmNsb3NlKCkgd2hlbiBtYWluLmNsb3NlKCkgdGhyb3dzIGFuIGV4Y2VwdGlvbiAgSXNzdWU6IElPLTMwMy4gVGhhbmtzIHRvIGZhYmlhbi5iYXJuZXkuIApvIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpbiBCT01JbnB1dFN0cmVhbSB3aGVuIHJlYWRpbmcgYSBmaWxlIHdpdGhvdXQgQk9NIG11bHRpcGxlIHRpbWVzICBJc3N1ZTogSU8tMzAyLiBUaGFua3MgdG8ganN0ZXVlcndhbGQsIGRldGluaG8uIApvIEFkZCBJT1V0aWxzLmNsb3NlUXVpZXRseShTZWxlY3RvcikgbmVjZXNzYXJ5ICBJc3N1ZTogSU8tMzAxLiBUaGFua3MgdG8ga2F5a2F5LnVuaXF1ZS4gCm8gSU9VdGlscy5jbG9zZVF1aWV0bHkoKSBzaG91bGQgdGFrZSBhIFNlcnZlclNvY2tldCBhcyBhIHBhcmFtZXRlciAgSXNzdWU6IElPLTI5Mi4gVGhhbmtzIHRvIHNlYmIuIApvIEFkZCByZWFkL3JlYWRGdWxseSBtZXRob2RzIHRvIElPVXRpbHMgIElzc3VlOiBJTy0yOTAuIFRoYW5rcyB0byBzZWJiLiAKbyBTdXBwbHkgYSBSZXZlcnNlZExpbmVzRmlsZVJlYWRlciAgSXNzdWU6IElPLTI4OC4gVGhhbmtzIHRvIEdlb3JnIEhlbnpsZXIuIApvIEFkZCBuZXcgZnVuY3Rpb24gRmlsZVV0aWxzLmRpcmVjdG9yeUNvbnRhaW5zLiAgSXNzdWU6IElPLTI5MS4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBGaWxlVXRpbHMuY29udGVudEVxdWFscyBhbmQgSU9VdGlscy5jb250ZW50RXF1YWxzIC0gQWRkIG9wdGlvbiB0byBpZ25vcmUgImxpbmUgZW5kaW5ncyIKICAgICAgICBBZGRlZCBjb250ZW50RXF1YWxzSWdub3JlRU9MIG1ldGhvZHMgdG8gYm90aCBjbGFzc2VzICBJc3N1ZTogSU8tMjc1LiBUaGFua3MgdG8gQ0ogQXNwcm9tZ29zLiAKCkZpeGVkIEJ1Z3M6Cm8gSU9VdGlscy5yZWFkKElucHV0U3RyZWFtL1JlYWRlcikgaWdub3JlcyB0aGUgb2Zmc2V0IHBhcmFtZXRlciAgSXNzdWU6IElPLTMxMS4gVGhhbmtzIHRvIFJvYmVydCBNdWlyLiAKbyBDaGFyU2VxdWVuY2VJbnB1dFN0cmVhbShDaGFyU2VxdWVuY2UgcywgQ2hhcnNldCBjaGFyc2V0LCBpbnQgYnVmZmVyU2l6ZSkgaWdub3JlcyBidWZmZXJTaXplICBJc3N1ZTogSU8tMzEyLiAKbyBGaWxlVXRpbHMubW92ZURpcmVjdG9yeVRvRGlyZWN0b3J5IHJlbW92ZXMgc291cmNlIGRpcmVjdG9yeSBpZiBkZXN0aW5hdGlvbiBpcyBhIHN1YmRpcmVjdG9yeSAgSXNzdWU6IElPLTMwMC4gCm8gUmVhZGVySW5wdXRTdHJlYW0jcmVhZChieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgc2hvdWxkIGNoZWNrIGZvciB2YWxpZCBwYXJhbWV0ZXJzICBJc3N1ZTogSU8tMzA3LiAKbyBSZWFkZXJJbnB1dFN0cmVhbSNyZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSBzaG91bGQgYWx3YXlzIHJldHVybiAwIGZvciBsZW5ndGggPT0gMCAgSXNzdWU6IElPLTMwNi4gCm8gIkZpbGVVdGlscyNkZWxldGVEaXJlY3RvcnlPbkV4aXQoRmlsZSkiIGRvZXMgbm90IHdvcmsgIElzc3VlOiBJTy0yNzYuIFRoYW5rcyB0byBua2FtaS4gCm8gQm91bmRlZElucHV0U3RyZWFtLnJlYWQoKSB0cmVhdHMgbWF4IGRpZmZlcmVudGx5IGZyb20gQm91bmRlZElucHV0U3RyZWFtLnJlYWQoYnl0ZVtdLi4uKSAgSXNzdWU6IElPLTI3My4gVGhhbmtzIHRvIHNlYmIuIApvIFZhcmlvdXMgbWV0aG9kcyBvZiBjbGFzcyAnb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlscycgaW5jb3JyZWN0bHkgc3VwcHJlc3MgJ2phdmEuaW8uSU9FeGNlcHRpb24nICBJc3N1ZTogSU8tMjk4LiBUaGFua3MgdG8gQ2hyaXN0aWFuIFNjaHVsdGUuIAoKQ2hhbmdlczoKbyBSZWFkZXJJbnB1dFN0cmVhbSBvcHRpbWl6YXRpb246IG1vcmUgZWZmaWNpZW50IHJlYWRpbmcgb2Ygc21hbGwgY2h1bmtzIG9mIGRhdGEgIElzc3VlOiBJTy0yOTYuIFRoYW5rcyB0byBPbGVnIEthbG5pY2hldnNraS4gCgoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuMSBhbmQgMS40OgpCaW5hcnkgY29tcGF0aWJsZTogWWVzClNvdXJjZSBjb21wYXRpYmxlOiBZZXMKU2VtYW50aWMgY29tcGF0aWJsZTogWWVzLiBDaGVjayB0aGUgYnVnIGZpeGVzIHNlY3Rpb24gZm9yIHNlbWFudGljIGJ1ZyBmaXhlcwoKQ29tbW9ucyBJTyAyLjIgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIEphdmEgNS4gCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIGEgbWluaW11bSBvZiBKYXZhIDEuMy4gCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpOZXcgZmVhdHVyZXM6Cm8gVXNlIHN0YW5kYXJkIE1hdmVuIGRpcmVjdG9yeSBsYXlvdXQgIElzc3VlOiBJTy0yODUuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gQWRkIElPVXRpbHMgQVBJIHRvU3RyaW5nIGZvciBVUkwgYW5kIFVSSSB0byBnZXQgY29udGVudHMgIElzc3VlOiBJTy0yODQuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gQWRkIEFQSSBGaWxlVXRpbHMuY29weUZpbGUoRmlsZSBpbnB1dCwgT3V0cHV0U3RyZWFtIG91dHB1dCkgIElzc3VlOiBJTy0yODIuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gRmlsZUFsdGVyYXRpb25PYnNlcnZlciBoYXMgbm8gZ2V0dGVyIGZvciBGaWxlRmlsdGVyICBJc3N1ZTogSU8tMjYyLiAKbyBBZGQgRmlsZVV0aWxzLmdldEZpbGUgQVBJIHdpdGggdmFyYXJncyBwYXJhbWV0ZXIgIElzc3VlOiBJTy0yNjEuIApvIEFkZCBuZXcgQVBQRU5EIHBhcmFtZXRlciBmb3Igd3JpdGluZyBzdHJpbmcgaW50byBmaWxlcyAgSXNzdWU6IElPLTE4Mi4gCm8gQWRkIG5ldyByZWFkIG1ldGhvZCAidG9CeXRlQXJyYXkiIHRvIGhhbmRsZSBJbnB1dFN0cmVhbSB3aXRoIGtub3duIHNpemUuICBJc3N1ZTogSU8tMjUxLiBUaGFua3MgdG8gTWFyY28gQWxiaW5pLiAKCkZpeGVkIEJ1Z3M6Cm8gRHViaW91cyB1c2Ugb2YgbWtkaXJzKCkgcmV0dXJuIGNvZGUgIElzc3VlOiBJTy0yODAuIFRoYW5rcyB0byBzZWJiLiAKbyBSZWFkZXJJbnB1dFN0cmVhbSBlbnRlcnMgaW5maW5pdGUgbG9vcCB3aGVuIGl0IGVuY291bnRlcnMgYW4gdW5tYXBwYWJsZSBjaGFyYWN0ZXIgIElzc3VlOiBJTy0yNzcuIApvIEZpbGVVdGlscy5tb3ZlRmlsZSgpIEphdmFkb2Mgc2hvdWxkIHNwZWNpZnkgRmlsZUV4aXN0c0V4Y2VwdGlvbiB0aHJvd24gIElzc3VlOiBJTy0yNjQuIApvIENsYXNzTG9hZGVyT2JqZWN0SW5wdXRTdHJlYW0gZG9lcyBub3QgaGFuZGxlIFByb3h5IGNsYXNzZXMgIElzc3VlOiBJTy0yNjAuIApvIFRhaWxlciByZXR1cm5pbmcgcGFydGlhbCBsaW5lcyB3aGVuIHJlYWNoaW5nIEVPRiBiZWZvcmUgRU9MICBJc3N1ZTogSU8tMjc0LiBUaGFua3MgdG8gRnJhbmsgR3JpbWVzLiAKbyBGaWxlVXRpbHMuY29weUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gd2hlbiBjb3B5aW5nIGxhcmdlIGZpbGVzIHRvIGEgc2hhcmVkIGRpcmVjdG9yeSAob24gV2luZG93cykgIElzc3VlOiBJTy0yNjYuIFRoYW5rcyB0byBJZ29yIFNtZXJla2EuIApvIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2VLYiB0aHJvd3MgZXhjZXB0aW9uIGZvciBXaW5kb3dzIHZvbHVtZXMgd2l0aCBubyB2aXNpYmxlIGZpbGVzLgogICAgICAgIEltcHJvdmUgY292ZXJhZ2UgYnkgYWxzbyBsb29raW5nIGZvciBoaWRkZW4gZmlsZXMuICBJc3N1ZTogSU8tMjYzLiBUaGFua3MgdG8gR2lsIEFkYW0uIAoKQ2hhbmdlczoKbyBGaWxlQWx0ZXJhdGlvbk1vbml0b3Iuc3RvcChib29sZWFuIGFsbG93SW50ZXJ2YWxUb0ZpbmlzaCkgIElzc3VlOiBJTy0yNTkuIAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFBhY2thZ2UgMi4wLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMi4wIGFuZCAxLjQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwogIENoZWNrIHRoZSBidWcgZml4ZXMgc2VjdGlvbiBmb3Igc2VtYW50aWMgYnVnIGZpeGVzCgpDb21tb25zIElPIDIuMC4xIHJlcXVpcmVzIGEgbWluaW11bSBvZiBKYXZhIDUKIChDb21tb25zIElPIDEuNCBoYWQgYSBtaW5pbXVtIG9mIEphdmEgMS4zKSAKCkVuaGFuY2VtZW50cyBmcm9tIDIuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICogW0lPLTI1Nl0gLSBQcm92aWRlIHRocmVhZCBmYWN0b3J5IGZvciBGaWxlQWx0ZXJuYXRpb25Nb25pdG9yCgpCdWcgZml4ZXMgZnJvbSAyLjAKLS0tLS0tLS0tLS0tLS0tLS0tCgogICAqIFtJTy0yNTddIC0gQk9NSW5wdXRTdHJlYW0ucmVhZChieXRlW10pIGNhbiByZXR1cm4gMCB3aGljaCBpdCBzaG91bGQgbm90CiAgICogW0lPLTI1OF0gLSBYbWxTdHJlYW1SZWFkZXIgY29uc3VtZXMgdGhlIHN0cmVhbSBkdXJpbmcgZW5jb2RpbmcgZGV0ZWN0aW9uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gUGFja2FnZSAyLjAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkNvbW1vbnMgSU8gMi4wIHJlcXVpcmVzIGEgbWluaW11bSBvZiBKYXZhIDUKIChDb21tb25zIElPIDEuNCBoYWQgYSBtaW5pbXVtIG9mIEphdmEgMS4zKSAKCkRlcHJlY2F0aW9ucyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0gSU9VdGlscwogIC0gd3JpdGUoU3RyaW5nQnVmZmVyLCBXcml0ZXIpIGluIGZhdm91ciBvZiB3cml0ZShDaGFyU2VxdWVuY2UsIFdyaXRlcikKICAtIHdyaXRlKFN0cmluZ0J1ZmZlciwgT3V0cHV0U3RyZWFtKSAgaW4gZmF2b3VyIG9mIHdyaXRlKENoYXJTZXF1ZW5jZSwgT3V0cHV0U3RyZWFtKQogIC0gd3JpdGUoU3RyaW5nQnVmZmVyLCBPdXRwdXRTdHJlYW0sIFN0cmluZykgaW4gZmF2b3VyIG9mIHdyaXRlKENoYXJTZXF1ZW5jZSwgT3V0cHV0U3RyZWFtLCBTdHJpbmcpCgotIEZpbGVGaWx0ZXJVdGlscwogIC0gYW5kRmlsZUZpbHRlcihJT0ZpbGVGaWx0ZXIsIElPRmlsZUZpbHRlcikgaW4gZmF2b3VyIG9mIGFuZChJT0ZpbGVGaWx0ZXIuLi4pIAogIC0gb3JGaWxlRmlsdGVyKElPRmlsZUZpbHRlciwgSU9GaWxlRmlsdGVyKSAgaW4gZmF2b3VyIG9mIG9yKElPRmlsZUZpbHRlci4uLikKCkVuaGFuY2VtZW50cyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgKiBbSU8tMTQwXSBNb3ZlIG1pbmltdW0gSmF2YSByZXF1aXJlbWVudCBmcm9tIEphdmEgMS4zIHRvIEphdmEgNQogICAgICAgICAgICAgLSB1c2UgR2VuZXJpY3MKICAgICAgICAgICAgIC0gYWRkIG5ldyBDaGFyU2VxdWVuY2Ugd3JpdGUoKSBmbGF2b3VyIG1ldGhvZHMgdG8gSU9VdGlscyBhbmQgRmlsZVV0aWxzCiAgICAgICAgICAgICAtIHJlcGxhY2UgU3RyaW5nQnVmZmVyIHdpdGggU3RyaW5nQnVpbGRlciwgd2hlcmUgYXBwcm9wcmlhdGUKICAgICAgICAgICAgIC0gYWRkIG5ldyBSZWFkZXIvV3JpdGVyIG1ldGhvZHMgdG8gUHJveHlSZWFkZXIgYW5kIFByb3h5V3JpdGVyCiAgICAgICAgICAgICAtIEFubm90YXRlIHdpdGggQE92ZXJyaWRlIGFuZCBARGVwcmVjYXRlZAoKICAqIFtJTy0xNzhdIE5ldyBCT01JbnB1dFN0cmVhbSBhbmQgQnl0ZU9yZGVyTWFyayBpbXBsZW1lbnRhdGlvbnMgLSB0byBkZXRlY3QgYW5kIG9wdGlvbmFsbHkgZXhjbHVkZSBhbiBpbml0aWFsIEJ5dGUgT3JkZXIgbWFyayAoQk9NKQogICogW0lPLTE5N10gTmV3IEJvdW5kZWRJbnB1dFN0cmVhbSAoY29waWVkIGZyb20gZnJvbSBBcGFjaGUgSmFja1JhYmJpdCkKICAqIFtJTy0xOTNdIE5ldyBCcm9rZW4gSW5wdXQgYW5kIE91dHB1dCBzdHJlYW1zCiAgKiBbSU8tMTMyXSBOZXcgRmlsZSBMaXN0ZW5lci9Nb25pdG9yIGZhY2lsaXR5CiAgKiBbSU8tMTU4XSBOZXcgUmVhZGVySW5wdXRTdHJlYW0gYW5kIFdyaXRlck91dHB1dFN0cmVhbSBpbXBsZW1lbnRhdGlvbnMKICAqIFtJTy0xMzldIE5ldyBTdHJpbmdCdWlsZGVyIFdyaXRlciBpbXBsZW1lbnRhdGlvbgogICogW0lPLTE5Ml0gTmV3IFRhZ2dlZCBJbnB1dCBhbmQgT3V0cHV0IHN0cmVhbXMKICAqIFtJTy0xNzddIE5ldyBUYWlsZXIgY2xhc3MgLSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFVuaXggInRhaWwgLWYiIGZ1bmN0aW9uYWxpdHkKICAqIFtJTy0xNjJdIE5ldyBYTUwgU3RyZWFtIFJlYWRlci9Xcml0ZXIgaW1wbGVtZW50YXRpb25zIChmcm9tIFJPTUUgdmlhIHBsZXh1cy11dGlscykKCiAgKiBbSU8tMTQyXSBDb21wYXJhdG9ycyAtIGFkZCBmYWNpbGl0eSB0byBzb3J0IGZpbGUgbGlzdHMvYXJyYXlzCiAgKiBbSU8tMTg2XSBDb21wYXJhdG9ycyAtIG5ldyBDb21wb3NpdGUgYW5kIERpcmVjdG9yeSBGaWxlIENvbXBhcmF0b3IgaW1wbGVtZW50YXRpb25zCiAgKiBbSU8tMTc2XSBEaXJlY3RvcnlXYWxrZXIgLSBhZGQgZmlsdGVyRGlyZWN0b3J5Q29udGVudHMoKSBjYWxsYmFjayBtZXRob2QgZm9yIGZpbHRlcmluZyBkaXJlY3RvcnkgY29udGVudHMKICAqIFtJTy0yMTBdIEZpbGVGaWx0ZXIgLSBuZXcgTWFnaWMgTnVtYmVyIEZpbGVGaWx0ZXIKICAqIFtJTy0yMjFdIEZpbGVGaWx0ZXJVdGlscyAtIGFkZCBtZXRob2RzIGZvciBzdWZmaXggYW5kIHByZWZpeCBmaWx0ZXJzIHdoaWNoIHRha2UgYW4gSU9DYXNlIG9iamVjdAogICogW0lPLTIzMl0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIG1ldGhvZCBmb3IgbmFtZSBmaWx0ZXJzIHdoaWNoIHRha2UgYW4gSU9DYXNlIG9iamVjdAogICogW0lPLTIyOV0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIHZhcmFyZ3MgYW5kKCkgYW5kIG9yKCkgbWV0aG9kcwogICogW0lPLTE5OF0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIGFiaWxpdHkgdG8gYXBwbHkgZmlsZSBmaWx0ZXJzIHRvIGNvbGxlY3Rpb25zIGFuZCBhcnJheXMKICAqIFtJTy0xNTZdIEZpbGVuYW1lVXRpbHMgLSBhZGQgbm9ybWFsaXplKCkgYW5kIG5vcm1hbGl6ZU5vRW5kU2VwYXJhdG9yKCkgbWV0aG9kcyB3aGljaCBhbGxvdyB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciB0byBiZSBzcGVjaWZpZWQKICAqIFtJTy0xOTRdIEZpbGVTeXN0ZW1VdGlscyAtIGFkZCBmcmVlU3BhY2VLYigpIG1ldGhvZCB3aXRoIG5vIGlucHV0IGFyZ3VtZW50cwogICogW0lPLTE4NV0gRmlsZVN5c3RlbVV0aWxzIC0gYWRkIGZyZWVTcGFjZUtiKCkgbWV0aG9kcyB0aGF0IHRha2UgYSB0aW1lb3V0IHBhcmFtZXRlciAtIGZpeGVzIGZyZWVTcGFjZVdpbmRvd3MoKSBibG9ja3MKICAqIFtJTy0xNTVdIEZpbGVVdGlscyAtIHVzZSBOSU8gdG8gY29weSBmaWxlcwogICogW0lPLTE2OF0gRmlsZVV0aWxzIC0gYWRkIG5ldyBpc1N5bWxpbmsoKSBtZXRob2QKICAqIFtJTy0yMTldIEZpbGVVdGlscyAtIHRocm93IEZpbGVFeGlzdHNFeGNlcHRpb24gd2hlbiBtb3ZpbmcgYSBmaWxlIG9yIGRpcmVjdG9yeSBpZiB0aGUgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMKICAqIFtJTy0yMzRdIEZpbGVVdGlscyAtIGFkZCBNZXRob2RzIGZvciByZXRyaWV2aW5nIFN5c3RlbSBVc2VyL1RlbXAgZGlyZWN0b3JpZXMvcGF0aHMKICAqIFtJTy0yMDhdIEZpbGVVdGlscyAtIGFkZCB0aW1lb3V0IChjb25uZWN0aW9uIGFuZCByZWFkKSBzdXBwb3J0IGZvciBjb3B5VVJMVG9GaWxlKCkgbWV0aG9kIAogICogW0lPLTIzOF0gRmlsZVV0aWxzIC0gYWRkIHNpemVPZihGaWxlKSBtZXRob2QKICAqIFtJTy0xODFdIExpbmVJdGVyYXRvciBub3cgaW1wbGVtZW50cyBJdGVyYWJsZQogICogW0lPLTIyNF0gSU9VdGlscyAtIGFkZCBjbG9zZVF1aWV0bHkoQ2xvc2VhYmxlKSBhbmQgY2xvc2VRdWlldGx5KFNvY2tldCkgbWV0aG9kcwogICogW0lPLTIwM10gSU9VdGlscyAtIGFkZCBza2lwRnVsbHkoKSBtZXRob2QgZm9yIElucHV0U3RyZWFtcwogICogW0lPLTEzN10gSU9VdGlscyBhbmQgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIC0gYWRkIHRvQnVmZmVyZWRJbnB1dFN0cmVhbSgpIG1ldGhvZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBhcnJheSBhbGxvY2F0aW9uL2NvcHkKICAqIFtJTy0xOTVdIFByb3h5IHN0cmVhbXMvUmVhZGVyL1dyaXRlciAtIHByb3ZpZGUgZXhjZXB0aW9uIGhhbmRsaW5nIG1ldGhvZHMKICAqIFtJTy0yMTFdIFByb3h5IElucHV0L091dHB1dCBzdHJlYW1zIC0gYWRkIHByZS9wb3N0IHByb2Nlc3Npbmcgc3VwcG9ydAogICogW0lPLTI0Ml0gUHJveHkgUmVhZGVyL1dyaXRlciAtIGFkZCBwcmUvcG9zdCBwcm9jZXNzaW5nIHN1cHBvcnQKCkJ1ZyBmaXhlcyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0KICAqIFtJTy0yMTRdIEJ5dGVBcnJheU91dHB1dFN0cmVhbSAtIGZpeCBpbmNvbnNpc3RlbnQgc3luY2hyb25pemF0aW9uIG9mIGZpZWxkcwogICogW0lPLTIwMV0gQ291bnRpbmcgSW5wdXQvT3V0cHV0IHN0cmVhbXMgLSBmaXggaW5jb25zaXN0ZW50IHN5bmNocm9uaXphdGlvbgogICogW0lPLTE1OV0gRmlsZUNsZWFuaW5nVHJhY2tlciAtIGZpeCByZW1vdmUoKSBuZXZlciByZXR1cm5zIG51bGwKICAqIFtJTy0yMjBdIEZpbGVDbGVhbmluZ1RyYWNrZXIgLSBmaXggVmVjdG9yIHBlcmZvcm1zIGJhZGx5IHVuZGVyIGxvYWQKICAqIFtJTy0xNjddIEZpbGVuYW1lVXRpbHMgLSBmaXggY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgaGFuZGxpbmcgaW4gRmlsZW5hbWVVdGlscyBhbmQgRmlsZXN5c3RlbVV0aWxzCiAgKiBbSU8tMTc5XSBGaWxlbmFtZVV0aWxzIC0gZml4IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHMgZXhjZXB0aW9uIGluIGdldFBhdGhOb0VuZFNlcGFyYXRvcigpCiAgKiBbSU8tMjQ4XSBGaWxlbmFtZVV0aWxzIC0gZml4IGdldEZ1bGxQYXRoTm9FbmRTZXBhcmF0b3IoKSByZXR1cm5zIGVtcHR5IHdoaWxlIHBhdGggaXMgYSBvbmUgbGV2ZWwgZGlyZWN0b3J5CiAgKiBbSU8tMjQ2XSBGaWxlbmFtZVV0aWxzIC0gZml4IHdpbGRjYXJkTWF0Y2ggZ2l2ZXMgaW5jb3JyZWN0IHJlc3VsdHMgCiAgKiBbSU8tMTg3XSBGaWxlU3lzdGVtVXRpbHMgLSBmaXggZnJlZVNwYWNlS2IoKSBkb2Vzbid0IHdvcmsgd2l0aCByZWxhdGl2ZSBwYXRocyBvbiBMaW51eAogICogW0lPLTE2MF0gRmlsZVN5c3RlbVV0aWxzIC0gZml4IGZyZWVTcGFjZSgpIGZhaWxzIG9uIHNvbGFyaXMKICAqIFtJTy0yMDldIEZpbGVTeXN0ZW1VdGlscyAtIGZpeCBmcmVlU3BhY2VLYigpIGZhaWxzIHRvIHJldHVybiBjb3JyZWN0IHNpemUgZm9yIGEgd2luZG93cyBtb3VudCBwb2ludAogICogW0lPLTE2M10gRmlsZVV0aWxzIC0gZml4IHRvVVJMcygpIHVzaW5nIGRlcHJlY2F0ZWQgbWV0aG9kIG9mIGNvbnZlcnNpb24gdG8gVVJMCiAgKiBbSU8tMTY4XSBGaWxlVXRpbHMgLSBmaXggU3ltYm9saWMgbGlua3MgZm9sbG93ZWQgd2hlbiBkZWxldGluZyBkaXJlY3RvcnkKICAqIFtJTy0yMzFdIEZpbGVVdGlscyAtIGZpeCB3cm9uZyBleGNlcHRpb24gbWVzc2FnZSBnZW5lcmF0ZWQgaW4gaXNGaWxlTmV3ZXIoKSBtZXRob2QKICAqIFtJTy0yMDddIEZpbGVVdGlscyAtIGZpeCByYWNlIGNvbmRpdGlvbiBpbiBmb3JjZU1rZGlyKCkgbWV0aG9kCiAgKiBbSU8tMjE3XSBGaWxlVXRpbHMgLSBmaXggY29weURpcmVjdG9yeVRvRGlyZWN0b3J5KCkgbWFrZXMgaW5maW5pdGUgbG9vcHMKICAqIFtJTy0xNjZdIEZpbGVVdGlscyAtIGZpeCBVUkwgZGVjb2RpbmcgaW4gdG9GaWxlKFVSTCkKICAqIFtJTy0xOTBdIEZpbGVVdGlscyAtIGZpeCBjb3B5RGlyZWN0b3J5IG5vdCBwcmVzZXJ2aW5nIGxhc3Rtb2RpZmllZCBkYXRlIG9uIHN1YmRpcmVjdG9yaWVzCiAgKiBbSU8tMjQwXSBGaWxlRmlsdGVyVXRpbHMgLSBlbnN1cmUgY3ZzRmlsdGVyIGFuZCBzdm5GaWx0ZXIgYXJlIG9ubHkgY3JlYXRlZCBvbmNlLgogICogW0lPLTE3NV0gSU9VdGlscyAtIGZpeCBjb3B5RmlsZSgpIGlzc3VlcyB3aXRoIHZlcnkgbGFyZ2UgZmlsZXMKICAqIFtJTy0xOTFdIEltcHJvdmVtZW50cyBmcm9tIHN0YXRpYyBhbmFseXNpcwogICogW0lPLTIxNl0gTG9ja2FibGVGaWxlV3JpdGVyIC0gZGVsZXRlIGZpbGVzIHF1aWV0bHkgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyBpbml0aWFsaXphdGlvbgogICogW0lPLTI0M10gU3dhcHBlZERhdGFJbnB1dFN0cmVhbSAtIGZpeCByZWFkQm9vbGVhbiBpcyBpbnZlcnRlZAogICogW0lPLTIzNV0gVGVzdHMgLSByZW1vdmUgdW51c2VkIFllbGxPbkZsdXNoQW5kQ2xvc2VPdXRwdXRTdHJlYW0gZnJvbSBDb3B5VXRpbHNUZXN0CiAgKiBbSU8tMTYxXSBUZXN0cyAtIGZpeCBGaWxlQ2xlYW5pbmdUcmFja2VyVGVzdENhc2UgaGFuZ2luZwoKRG9jdW1lbnRhdGlvbiBjaGFuZ2VzIGZyb20gMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogW0lPLTE4MyBGaWxlbmFtZVV0aWxzLmdldEV4dGVuc2lvbigpIG1ldGhvZCBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cwogICogW0lPLTIyNiBGaWxlVXRpbHMuYnl0ZUNvdW50VG9EaXNwbGF5U2l6ZSgpIGRvY3VtZW50YXRpb24gY29ycmVjdGlvbnMKICAqIFtJTy0yMDUgRmlsZVV0aWxzLmZvcmNlTWtkaXIoKSBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cwogICogW0lPLTIxNSBGaWxlVXRpbHMgY29weSBmaWxlL2RpcmVjdG9yeSBpbXByb3ZlIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHByZXNlcnZpbmcgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZQogICogW0lPLTE4OSBIZXhEdW1wLmR1bXAoKSBtZXRob2QgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKICAqIFtJTy0xNzEgSU9DYXNlIGRvY3VtZW50IHRoYXQgaXQgYXNzdW1lcyB0aGVyZSBhcmUgb25seSB0d28gT1NlczogV2luZG93cyBhbmQgVW5peAogICogW0lPLTIyMyBJT1V0aWxzLmNvcHkoKSBkb2N1bWVudGF0aW9uIGNvcnJlY3Rpb25zCiAgKiBbSU8tMjQ3IElPVXRpbHMuY2xvc2VRdWlldGx5KCkgaW1wcm92ZSBkb2N1bWVudGF0aW9uIHdpdGggZXhhbXBsZXMKICAqIFtJTy0yMDIgTm90RmlsZUZpbHRlciBkb2N1bWVudGF0aW9uIGNvcnJlY3Rpb25zCiAgKiBbSU8tMjA2IFByb3h5SW5wdXRTdHJlYW0gLSBmaXggbWlzbGVhZGluZyBwYXJhbWV0ZXIgbmFtZXMKICAqIFtJTy0yMTIgUHJveHlJbnB1dFN0cmVhbS5za2lwKCkgZG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMS40Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tcGF0aWJpbGl0eSB3aXRoIDEuMy4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIFllcwoKU291cmNlIGNvbXBhdGlibGUgLSBZZXMKClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKICBDaGVjayB0aGUgYnVnIGZpeGVzIHNlY3Rpb24gZm9yIHNlbWFudGljIGJ1ZyBmaXhlcwoKQ29tbW9ucyBJTyAxLjQgaW50cm9kdWNlcyBmb3VyIG5ldyBpbXBsZW1lbnRhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIEphdmEgNCBmZWF0dXJlcwooQ2hhclNlcXVlbmNlUmVhZGVyLCBGaWxlV3JpdGVyV2l0aEVuY29kaW5nLCBJT0V4Y2VwdGlvbldpdGhDYXVzZSBhbmQgUmVnZXhGaWxlRmlsdGVyKS4KSXQgaGFzIGJlZW4gYnVpbHQgd2l0aCB0aGUgSkRLIHNvdXJjZSBhbmQgdGFyZ2V0IG9wdGlvbnMgc2V0IHRvIEphdmEgMS4zIGFuZCwgZXhjZXB0IGZvcgp0aG9zZSBpbXBsZW1lbnRhdGlvbnMsIGNhbiBiZSB1c2VkIHdpdGggSmF2YSAxLjMgKHNlZSBJTyBJTy0xMjcpLgoKRGVwcmVjYXRpb25zIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlQ2xlYW5lciBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBGaWxlQ2xlYW5pbmdUcmFja2VyIFtzZWUgSU8tMTE2XQoKQnVnIGZpeGVzIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlVXRpbHMKICAtIGZvcmNlRGVsZXRlIG9mIG9ycGhhbmVkIFNvZnRsaW5rcyBkb2VzIG5vdCB3b3JrIFtJTy0xNDddCiAgLSBJbmZpbml0ZSBsb29wIG9uIEZpbGVVdGlscy5jb3B5RGlyZWN0b3J5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBpcyB3aXRoaW4KICAgIHRoZSBzb3VyY2UgZGlyZWN0b3J5IFtJTy0xNDFdCiAgLSBBZGQgYSBjb3B5RGlyZWN0b3J5KCkgbWV0aG9kIHRoYXQgbWFrZXMgdXNlIG9mIEZpbGVGaWx0ZXIgW0lPLTEwNV0KICAtIEFkZCBtb3ZlRGlyZWN0b3J5KCkgYW5kIG1vdmVGaWxlKCkgbWV0aG9kcyBbSU8tNzddCgotIEhleER1bXAKICAtIEhleER1bXAncyB1c2Ugb2Ygc3RhdGljIFN0cmluZ0J1ZmZlcnMgaXNuJ3QgdGhyZWFkLXNhZmUgW0lPLTEzNl0KCkVuaGFuY2VtZW50cyBmcm9tIDEuMy4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZVV0aWxzCiAgLSBBZGQgYSBkZWxldGVRdWlldGx5IG1ldGhvZCBbSU8tMTM1XQoKLSBGaWxlbmFtZVV0aWxzCiAgLSBBZGQgZmlsZSBuYW1lIGV4dGVuc2lvbiBzZXBhcmF0b3IgY29uc3RhbnRzW0lPLTE0OV0KCi0gSU9FeGNlcHRpb25XaXRoQ2F1c2UgW0lPLTE0OF0KICAtIEFkZCBhIG5ldyBJT0V4Y2VwdGlvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIGNvbnN0cnVjdG9ycyB3aGljaCB0YWtlIGEgY2F1c2UKCi0gVGVlSW5wdXRTdHJlYW0gW0lPLTEyOV0KICAtIEFkZCBuZXcgVGVlIGlucHV0IHN0cmVhbSBpbXBsZW1lbnRhdGlvbgoKLSBGaWxlV3JpdGVyV2l0aEVuY29kaW5nIFtJTy0xNTNdCiAgLSBBZGQgbmV3IEZpbGUgV3JpdGVyIGltcGxlbWVudGF0aW9uIHRoYXQgYWNjZXB0cyBhbiBlbmNvZGluZwoKLSBDaGFyU2VxdWVuY2VSZWFkZXIgW0lPLTEzOF0KICAtIEFkZCBuZXcgUmVhZGVyIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBhbnkgQ2hhclNlcXVlbmNlIChTdHJpbmcsCiAgICBTdHJpbmdCdWZmZXIsIFN0cmluZ0J1aWxkZXIgb3IgQ2hhckJ1ZmZlcikgCgotIFRocmVzaG9sZGluZ091dHB1dFN0cmVhbSBbSU8tMTIxXQogIC0gQWRkIGEgcmVzZXQoKSBtZXRob2Qgd2hpY2ggc2V0cyB0aGUgY291bnQgb2YgdGhlIGJ5dGVzIHdyaXR0ZW4gYmFjayB0byB6ZXJvLgoKLSBEZWZlcnJlZEZpbGVPdXRwdXRTdHJlYW0gW0lPLTEzMF0KICAtIEFkZCBzdXBwb3J0IGZvciB0ZW1wb3JhcnkgZmlsZXMKCi0gQnl0ZUFycmF5T3V0cHV0U3RyZWFtCiAgLSBBZGQgYSBuZXcgd3JpdGUoSW5wdXRTdHJlYW0pIG1ldGhvZCBbSU8tMTUyXQoKLSBOZXcgQ2xvc2VkIElucHV0L091dHB1dCBzdHJlYW0gaW1wbGVtZW50YXRpb25zIFtJTy0xMjJdCiAgLSBBdXRvQ2xvc2VJbnB1dFN0cmVhbSAtIGF1dG9tYXRpY2FsbHkgY2xvc2VzIGFuZCBkaXNjYXJkcyB0aGUgdW5kZXJseWluZyBpbnB1dCBzdHJlYW0KICAtIENsb3NlZElucHV0U3RyZWFtIC0gcmV0dXJucyAtMSBmb3IgYW55IHJlYWQgYXR0ZW1wdHMKICAtIENsb3NlZE91dHB1dFN0cmVhbSAtIHRocm93cyBhbiBJT0V4Y2VwdGlvbiBmb3IgYW55IHdyaXRlIGF0dGVtcHRzCiAgLSBDbG9zZVNoaWVsZElucHV0U3RyZWFtIC0gcHJldmVudHMgdGhlIHVuZGVybHlpbmcgaW5wdXQgc3RyZWFtIGZyb20gYmVpbmcgY2xvc2VkLgogIC0gQ2xvc2VTaGllbGRPdXRwdXRTdHJlYW0gLSBwcmV2ZW50cyB0aGUgdW5kZXJseWluZyBvdXRwdXQgc3RyZWFtIGZyb20gYmVpbmcgY2xvc2VkLgoKLSBBZGQgU2luZ2xldG9uIENvbnN0YW50cyB0byBzZXZlcmFsIHN0cmVhbSBjbGFzc2VzIFtJTy0xNDNdCgotIFByZWZpeEZpbGVGaWx0ZXIgW0lPLTEyNl0KICAtIEFkZCBmYWNpbGl0eSB0byBzcGVjaWZ5IGNhc2Ugc2Vuc2l0aXZpdHkgb24gcHJlZml4IG1hdGNoaW5nCgotIFN1ZmZpeEZpbGVGaWx0ZXIgW0lPLTEyNl0KICAtIEFkZCBmYWNpbGl0eSB0byBzcGVjaWZ5IGNhc2Ugc2Vuc2l0aXZpdHkgb24gc3VmZml4IG1hdGNoaW5nCgotIFJlZ2V4RmlsZUZpbHRlciBbSU8tNzRdCiAgLSBBZGQgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbiBmaWxlIGZpbHRlciBpbXBsZW1lbnRhdGlvbgoKLSBNYWtlIElPRmlsZUZpbHRlciBpbXBsZW1lbnRhdGlvbnMgU2VyaWFsaXphYmxlIFtJTy0xMzFdCgotIEltcHJvdmUgSU9GaWxlRmlsdGVyIHRvU3RyaW5nKCkgbWV0aG9kcyBbSU8tMTIwXQoKLSBNYWtlIGZpZWxkcyBmaW5hbCBzbyBjbGFzc2VzIGFyZSBpbW11dGFibGUvdGhyZWFkc2FmZSBbSU8tMTMzXQogIC0gY2hhbmdlcyB0byBBZ2UsIERlbGVnYXRlLCBOYW1lLCBOb3QsIFByZWZpeCwgUmVnZXgsIFNpemUsIFN1ZmZpeCBhbmQgV2lsZGNhcmQgSU9GaWxlRmlsdGVyCiAgICBpbXBsZW1lbnRhdGlvbnMuCgotIElPQ2FzZQogIC0gQWRkIGEgY29tcGFyZSBtZXRob2QgdG8gSU9DYXNlIFtJTy0xNDRdCgotIEFkZCBhIHBhY2thZ2Ugb2YgamF2YS51dGlsLkNvbXBhcmF0b3IgaW1wbGVtZW50YXRpb25zIGZvciBmaWxlcyBbSU8tMTQ1XQogIC0gRGVmYXVsdEZpbGVDb21wYXJhdG9yIC0gY29tcGFyZSBmaWxlcyB1c2luZyB0aGUgZGVmYXVsdCBGaWxlLmNvbXBhcmVUbyhGaWxlKSBtZXRob2QuCiAgLSBFeHRlbnNpb25GaWxlQ29tcGFyYXRvciAtIGNvbXBhcmVzIGZpbGVzIHVzaW5nIGZpbGUgbmFtZSBleHRlbnNpb25zLgogIC0gTGFzdE1vZGlmaWVkRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyB0aGUgbGFzdCBtb2RpZmllZCBkYXRlL3RpbWUuCiAgLSBOYW1lRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyBmaWxlIG5hbWVzLgogIC0gUGF0aEZpbGVDb21wYXJhdG9yIC0gY29tcGFyZXMgZmlsZXMgdXNpbmcgZmlsZSBwYXRocy4KICAtIFNpemVGaWxlQ29tcGFyYXRvciAtIGNvbXBhcmVzIGZpbGVzIHVzaW5nIGZpbGUgc2l6ZXMuCiAgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDEuMy4yCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tcGF0aWJpbGl0eSB3aXRoIDEuMy4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCgpDb21wYXRpYmlsaXR5IHdpdGggMS4zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBObwogIFNlZSBbSU8tMTEzXQoKU291cmNlIGNvbXBhdGlibGUgLSBObwogIFNlZSBbSU8tMTEzXQoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKRW5oYW5jZW1lbnRzIHNpbmNlIDEuMy4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLSBDcmVhdGVkIHRoZSBGaWxlQ2xlYW5pbmdUcmFja2VyLCBiYXNpY2FsbHkgYSBub24tc3RhdGljIHZlcnNpb24gb2YgdGhlCiAgRmlsZUNsZWFuZXIsIHdoaWNoIGNhbiBiZSBjb250cm9sbGVkIGJ5IHRoZSB1c2VyLiBbSU8tMTE2XQotIFRoZSBGaWxlQ2xlYW5lciBpcyBkZXByZWNhdGVkLgoKQnVnIGZpeGVzIGZyb20gMS4zLjEKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0gU29tZSB0ZXN0cywgd2hpY2ggYXJlIGltcGxpY2l0bHkgYXNzdW1pbmcgYSBVbml4LWxpa2UgZmlsZSBzeXN0ZW0sIGFyZQogIG5vdyBza2lwcGVkIG9uIFdpbmRvd3MuIFtJTy0xMTVdCi0gRW5kaWFuVXRpbHMKICAtIEJvdGggcmVhZFN3YXBwZWRVbnNpZ25lZEludGVnZXIoLi4uKSBtZXRob2RzIGNvdWxkIHJldHVybiBuZWdhdGl2ZSAKICAgIG51bWJlcnMgZHVlIHRvIGludC9sb25nIGNhc3RpbmcuIFtJTy0xMTddCgpCdWcgZml4ZXMgZnJvbSAxLjMKLS0tLS0tLS0tLS0tLS0tLS0tCgotIEZpbGVVdGlscwogIC0gTlBFIGluIG9wZW5PdXRwdXRTdHJlYW0oRmlsZSkgd2hlbiBmaWxlIGhhcyBubyBwYXJlbnQgaW4gcGF0aCBbSU8tMTEyXQogIC0gcmVhZEZpbGVUb1N0cmluZyhGaWxlKSBpcyBub3Qgc3RhdGljIFtJTy0xMTNdCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAxLjMuMQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIE5vCiAgU2VlIFtJTy0xMTNdCgpTb3VyY2UgY29tcGF0aWJsZSAtIE5vCiAgU2VlIFtJTy0xMTNdCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCgpCdWcgZml4ZXMgZnJvbSAxLjMKLS0tLS0tLS0tLS0tLS0tLS0tCgotIEZpbGVVdGlscwogIC0gTlBFIGluIG9wZW5PdXRwdXRTdHJlYW0oRmlsZSkgd2hlbiBmaWxlIGhhcyBubyBwYXJlbnQgaW4gcGF0aCBbSU8tMTEyXQogIC0gcmVhZEZpbGVUb1N0cmluZyhGaWxlKSBpcyBub3Qgc3RhdGljIFtJTy0xMTNdCiAgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDEuMwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIFllcwoKU291cmNlIGNvbXBhdGlibGUgLSBZZXMKClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKICBDaGVjayB0aGUgYnVnIGZpeGVzIHNlY3Rpb24gZm9yIHNlbWFudGljIGJ1ZyBmaXhlcwoKRGVwcmVjYXRpb25zIGZyb20gMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFdpbGRjYXJkRmlsdGVyIGRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IFdpbGRjYXJkRmlsZUZpbHRlcgogIC0gb2xkIGNsYXNzIG9ubHkgYWNjZXB0ZWQgZmlsZXMsIHRodXMgaGFkIGEgY29uZnVzaW5nIGR1YWwgcHVycG9zZQoKLSBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlIGRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGZyZWVTcGFjZUtiCiAgLSBmcmVlU3BhY2UgcmV0dXJucyBhIHJlc3VsdCB0aGF0IHZhcmllcyBieSBvcGVyYXRpbmcgc3lzdGVtIGFuZAogICAgdGh1cyBpc24ndCB0aGF0IHVzZWZ1bAogIC0gZnJlZVNwYWNlS2IgcmV0dXJucyBtdWNoIGJldHRlciBhbmQgbW9yZSBjb25zaXN0ZW50IHJlc3VsdHMKICAtIGZyZWVTcGFjZUtiIGV4aXN0ZWQgaW4gdjEuMiwgc28gdGhpcyBpcyBhIGdlbnRsZSBjdXRvdmVyCgpCdWcgZml4ZXMgZnJvbSAxLjIKLS0tLS0tLS0tLS0tLS0tLS0tCi0gTGluZUl0ZXJhdG9yIG5vdyBpbXBsZW1lbnRzIEl0ZXJhdG9yCiAgLSBJdCB3YXMgYWx3YXlzIHN1cHBvc2VkIHRvLi4uCgotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2UvZnJlZVNwYWNlS2IgW0lPLTgzXQogIC0gVGhlc2Ugc2hvdWxkIG5vdyB3b3JrIG9uIEFJWCBhbmQgSFAtVVgKCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZS9mcmVlU3BhY2VLYiBbSU8tOTBdCiAgLSBBdm9pZCBpbmZpbml0ZSBsb29waW5nIGluIFdpbmRvd3MKICAtIENhdGNoIG1vcmUgZXJyb3JzIHdpdGggbmljZSBtZXNzYWdlcwoKLSBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlIFtJTy05MV0KICAtIFRoaXMgaXMgbm93IGRvY3VtZW50ZWQgbm90IHRvIHdvcmsgb24gU3VuT1MgNQoKLSBGaWxlU3lzdGVtVXRpbHMgW0lPLTkzXQogIC0gRml4ZWQgcmVzb3VyY2UgbGVhayBsZWFkaW5nIHRvICdUb28gbWFueSBvcGVuIGZpbGVzJyBlcnJvcgogIC0gUHJldmlvdXNseSBkaWQgbm90IGRlc3Ryb3kgUHJvY2VzcyBpbnN0YW5jZXMgKGFzIEpESyBKYXZhZG9jIGlzIHNvIHBvb3IpCiAgLSBodHRwOi8vYnVncy5zdW4uY29tL2J1Z2RhdGFiYXNlL3ZpZXdfYnVnLmRvP2J1Z19pZD00ODAxMDI3CgotIEZpbGVVdGlscy50b3VjaCBbSU8tMTAwXQogIC0gVGhlIHRvdWNoIG1ldGhvZCBwcmV2aW91c2x5IGdhdmUgbm8gaW5kaWNhdGlvbiB3aGVuIHRoZSBmaWxlIGNvdWxkIG5vdAogICAgYmUgdG91Y2hlZCBzdWNjZXNzZnVsbHkgKHN1Y2ggYXMgZHVlIHRvIGFjY2VzcyByZXN0cmljdGlvbnMpIC0gaXQgbm93CiAgICB0aHJvd3MgYW4gSU9FeGNlcHRpb24gaWYgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZSBjYW5ub3QgYmUgY2hhbmdlZAoKLSBGaWxlQ2xlYW5lcgogIC0gVGhpcyBub3cgaGFuZGxlcyB0aGUgc2l0dWF0aW9uIHdoZXJlIGFuIGVycm9yIG9jY3VycyB3aGVuIGRlbGV0aW5nIHRoZSBmaWxlCgotIElPVXRpbHMuY29weSBbSU8tODRdCiAgLSBDb3B5IG1ldGhvZHMgY291bGQgcmV0dXJuIGluYWNjdXJhdGUgYnl0ZS9jaGFyIGNvdW50IGZvciBsYXJnZSBzdHJlYW1zCiAgLSBUaGUgY29weShJbnB1dFN0cmVhbSwgT3V0cHV0U3RyZWFtKSBtZXRob2Qgbm93IHJldHVybnMgLTEgaWYgdGhlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiBhbiBpbnQKICAtIFRoZSBjb3B5KFJlYWRlciwgV3JpdGVyKSBtZXRob2Qgbm93IHRocm93cyBub3cgcmV0dXJucyAtMSBpZiB0aGUgY291bnQgaXMgZ3JlYXRlciB0aGFuIGFuIGludAogIC0gQWRkZWQgYSBuZXcgY29weUxhcmdlKElucHV0U3RyZWFtLCBPdXRwdXRTdHJlYW0pIG1ldGhvZCB0aGF0IHJldHVybnMgYSBsb25nCiAgLSBBZGRlZCBhIG5ldyBjb3B5TGFyZ2UoUmVhZGVyLCBXcml0ZXIpIG1ldGhvZCB0aGF0IHJldHVybnMgYSBsb25nCgotIENvdW50aW5nSW5wdXRTdHJlYW0vQ291bnRpbmdPdXRwdXRTdHJlYW0gW0lPLTg0XQogIC0gTWV0aG9kcyB3ZXJlIGRlY2xhcmVkIGFzIGludCB0aHVzIHRoZSBjb3VudCB3YXMgaW5hY2N1cmF0ZSBmb3IgbGFyZ2Ugc3RyZWFtcwogIC0gbmV3IGxvbmcgYmFzZWQgbWV0aG9kcyBnZXRCeXRlQ291bnQoKS9yZXNldEJ5dGVDb3VudCgpIGFkZGVkCiAgLSBleGlzdGluZyBtZXRob2RzIGNoYW5nZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gYW4gaW50CgotIEZpbGVCYXNlZFRlc3RDYXNlCiAgLSBGaXhlZCBidWcgaW4gY29tcGFyZSBjb250ZW50IG1ldGhvZHMgaWRlbnRpZmllZCBieSBHTlUgY2xhc3NwYXRoCgotIEVuZGlhblV0aWxzLndyaXRlU3dhcHBlZExvbmcoYnl0ZVtdLCBpbnQpIFtJTy0xMDFdCiAgLSBBbiBpbnQgb3ZlcnJ1biBpbiB0aGUgYml0IHNoaWZ0aW5nIHdoZW4gaXQgc2hvdWxkIGhhdmUgYmVlbiBhIGxvbmcKCi0gRW5kaWFuVXRpbHMud3JpdGVTd2FwcGVkTG9uZyhJbnB1dFN0cmVhbSkgW0lPLTEwMl0KICAtIFRoZSByZXR1cm4gb2YgaW5wdXQucmVhZChieXRlW10pIHdhcyBub3QgYmVpbmcgY2hlY2tlZCB0byBlbnN1cmUgYWxsIDggYnl0ZXMgd2VyZSByZWFkCgpFbmhhbmNlbWVudHMgZnJvbSAxLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRGlyZWN0b3J5V2Fsa2VyIFtJTy04Nl0KICAtIE5ldyBjbGFzcyBkZXNpZ25lZCBmb3Igc3ViY2xhc3NpbmcgdG8gd2FsayB0aHJvdWdoIGEgc2V0IG9mIGZpbGVzLgogICAgRGlyZWN0b3J5V2Fsa2VyIHByb3ZpZGVzIHRoZSB3YWxrIG9mIHRoZSBkaXJlY3RvcmllcywgZmlsdGVyaW5nIG9mCiAgICBkaXJlY3RvcmllcyBhbmQgZmlsZXMsIGFuZCBjYW5jZWxsYXRpb24gc3VwcG9ydC4gVGhlIHN1YmNsYXNzIG11c3QgcHJvdmlkZQogICAgdGhlIHNwZWNpZmljIGJlaGF2aW9yLCBzdWNoIGFzIHRleHQgc2VhcmNoaW5nIG9yIGltYWdlIHByb2Nlc3NpbmcuCgotIElPQ2FzZQogIC0gTmV3IGNsYXNzL2VudW1lcmF0aW9uIGZvciBjYXNlLXNlbnNpdGl2aXR5IGNvbnRyb2wKCi0gRmlsZW5hbWVVdGlscwogIC0gTmV3IG1ldGhvZHMgdG8gaGFuZGxlIGNhc2Utc2Vuc2l0aXZpdHkKICAtIHdpbGRjYXJkTWF0Y2ggLSBuZXcgbWV0aG9kIHRoYXQgaGFzIElPQ2FzZSBhcyBhIHBhcmFtZXRlcgogIC0gZXF1YWxzIC0gbmV3IG1ldGhvZCB0aGF0IGhhcyBJT0Nhc2UgYXMgYSBwYXJhbWV0ZXIKCi0gRmlsZVV0aWxzIFtJTy0xMDhdIC0gbmV3IGRlZmF1bHQgZW5jb2RpbmcgbWV0aG9kcyBmb3I6CiAgLSByZWFkRmlsZVRvU3RyaW5nKEZpbGUpCiAgLSByZWFkTGluZXMoRmlsZSkKICAtIGxpbmVJdGVyYXRvcihGaWxlKQogIC0gd3JpdGVTdHJpbmdUb0ZpbGUoRmlsZSwgU3RyaW5nKQogIC0gd3JpdGVMaW5lcyhGaWxlLCBDb2xsZWN0aW9uKQogIC0gd3JpdGVMaW5lcyhGaWxlLCBDb2xsZWN0aW9uLCBTdHJpbmcpCgotIEZpbGVVdGlscy5vcGVuT3V0cHV0U3RyZWFtICBbSU8tMTA3XQogIC0gbmV3IG1ldGhvZCB0byBvcGVuIGEgRmlsZU91dHB1dFN0cmVhbSwgY3JlYXRpbmcgcGFyZW50IGRpcmVjdG9yaWVzIGlmIHJlcXVpcmVkCi0gRmlsZVV0aWxzLnRvdWNoCi0gRmlsZVV0aWxzLmNvcHlVUkxUb0ZpbGUKLSBGaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUKLSBGaWxlVXRpbHMud3JpdGVCeXRlQXJyYXlUb0ZpbGUKLSBGaWxlVXRpbHMud3JpdGVMaW5lcwogIC0gZW5oYW5jZWQgdG8gY3JlYXRlIHBhcmVudCBkaXJlY3RvcmllcyBpZiByZXF1aXJlZAotIEZpbGVVdGlscy5vcGVuSW5wdXRTdHJlYW0gIFtJTy0xMDddCiAgLSBuZXcgbWV0aG9kIHRvIG9wZW4gYSBGaWxlSW5wdXRTdHJlYW0sIHByb3ZpZGluZyBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgdGhhbiB0aGUgSkRLCgotIEZpbGVVdGlscy5pc0ZpbGVPbGRlcgogIC0gbmV3IG1ldGhvZHMgdG8gY2hlY2sgaWYgYSBmaWxlIGlzIG9sZGVyIChpLmUuIGlzRmlsZU9sZGVyKCkpIC0gY291bnRlcnBhcnRzCiAgICB0byB0aGUgZXhpc3RpbmcgaXNGaWxlTmV3ZXIoKSBtZXRob2RzLgoKLSBGaWxlVXRpbHMuY2hlY2tzdW0sIEZpbGVVdGlscy5jaGVja3N1bUNSQzMyCiAgLSBuZXcgbWV0aG9kcyB0byBjcmVhdGUgYSBjaGVja3N1bSBvZiBhIGZpbGUKCi0gRmlsZVV0aWxzLmNvcHlGaWxlVG9EaXJlY3RvcnkgIFtJTy0xMDRdCiAgLSBuZXcgdmFyaWFudCB0aGF0IG9wdGlvbmFsbHkgcmV0YWlucyB0aGUgZmlsZSBkYXRlCgotIEZpbGVEZWxldGVTdHJhdGVneQotIEZpbGVDbGVhbmVyICAgIFtJTy01NixJTy03MF0KICAtIEZpbGVEZWxldGVTdHJhdGVneSBpcyBhIHN0cmF0ZWd5IGZvciBoYW5kbGluZyBmaWxlIGRlbGV0aW9uCiAgLSBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgY2FsbGJhY2sgaW4gRmlsZUNsZWFuZXIKICAtIFRvZ2V0aGVyIHRoZXNlIGFsbG93IEZpbGVDbGVhbmVyIHRvIGRvIGEgZm9yY2VEZWxldGUgdG8ga2lsbCBkaXJlY3RvcmllcwoKLSBGaWxlQ2xlYW5lci5leGl0V2hlbkZpbmlzaGVkIFtJTy05OV0KICAtIEEgbmV3IG1ldGhvZCB0aGF0IGFsbG93cyB0aGUgaW50ZXJuYWwgY2xlYW5lciB0aHJlYWQgdG8gYmUgY2xlYW5seSB0ZXJtaW5hdGVkCgotIFdpbGRjYXJkRmlsZUZpbHRlcgogIC0gUmVwbGFjZW1lbnQgZm9yIFdpbGRjYXJkRmlsdGVyCiAgLSBBY2NlcHRzIGJvdGggZmlsZXMgYW5kIGRpcmVjdG9yaWVzCiAgLSBBYmlsaXR5IHRvIGNvbnRyb2wgY2FzZS1zZW5zaXRpdml0eQoKLSBOYW1lRmlsZUZpbHRlcgogIC0gQWJpbGl0eSB0byBjb250cm9sIGNhc2Utc2Vuc2l0aXZpdHkKCi0gRmlsZUZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5pc0ZpbGUoKSBpcyB0cnVlCiAgLSBJbiBvdGhlciB3b3JkcyBpdCBmaWx0ZXJzIG91dCBkaXJlY3RvcmllcwogIC0gU2luZ2xldG9uIGluc3RhbmNlIHByb3ZpZGVkIChGSUxFKQoKLSBDYW5SZWFkRmlsZUZpbHRlcgogIC0gTmV3IElPRmlsZUZpbHRlciBpbXBsZW1lbnRhdGlvbgogIC0gQWNjZXB0cyBmaWxlcyB3aGVyZSBGaWxlLmNhblJlYWQoKSBpcyB0cnVlCiAgLSBTaW5nbGV0b24gaW5zdGFuY2VzIHByb3ZpZGVkIChDQU5fUkVBRC9DQU5OT1RfUkVBRC9SRUFEX09OTFkpCgotIENhbldyaXRlRmlsZUZpbHRlcgogIC0gTmV3IElPRmlsZUZpbHRlciBpbXBsZW1lbnRhdGlvbgogIC0gQWNjZXB0cyBmaWxlcyB3aGVyZSBGaWxlLmNhbldyaXRlKCkgaXMgdHJ1ZQogIC0gU2luZ2xldG9uIGluc3RhbmNlcyBwcm92aWRlZCAoQ0FOX1dSSVRFL0NBTk5PVF9XUklURSkKCi0gSGlkZGVuRmlsZUZpbHRlcgogIC0gTmV3IElPRmlsZUZpbHRlciBpbXBsZW1lbnRhdGlvbgogIC0gQWNjZXB0cyBmaWxlcyB3aGVyZSBGaWxlLmlzSGlkZGVuKCkgaXMgdHJ1ZQogIC0gU2luZ2xldG9uIGluc3RhbmNlcyBwcm92aWRlZCAoSElEREVOL1ZJU0lCTEUpCgotIEVtcHR5RmlsZUZpbHRlcgogIC0gTmV3IElPRmlsZUZpbHRlciBpbXBsZW1lbnRhdGlvbgogIC0gQWNjZXB0cyBmaWxlcyBvciBkaXJlY3RvcmllcyB0aGF0IGFyZSBlbXB0eQogIC0gU2luZ2xldG9uIGluc3RhbmNlcyBwcm92aWRlZCAoRU1QVFkvTk9UX0VNUFRZKQoKLSBUcnVlRmlsZUZpbHRlci9GYWxzZUZpbGVGaWx0ZXIvRGlyZWN0b3J5RmlsZUZpbHRlcgogIC0gTmV3IHNpbmdsZXRvbiBpbnN0YW5jZSBjb25zdGFudHMgKFRSVUUvRkFMU0UvRElSRUNUT1JZKQogIC0gVGhlIG5ldyBjb25zdGFudHMgYXJlIG1vcmUgSmF2YSA1IGZyaWVuZGx5IHdpdGggcmVnYXJkcyB0byBzdGF0aWMgaW1wb3J0cwogICAgKHdoZXJlYXMgaWYgZXZlcnl0aGluZyB1c2VzIElOU1RBTkNFLCB0aGVuIHRoZXkganVzdCBjbGFzaCkKICAtIFRoZSBvbGQgSU5TVEFOQ0UgY29uc3RhbnRzIGFyZSBzdGlsbCBwcmVzZW50IGFuZCBoYXZlIG5vdCBiZWVuIGRlcHJlY2F0ZWQKCi0gRmlsZUZpbHRlclV0aWxzLnNpemVSYW5nZUZpbGVGaWx0ZXIKICAtIG5ldyBzaXplUmFuZ2VGaWxlRmlsdGVyKGxvbmcgbWluaW11bVNpemUsIGxvbmcgbWF4aW11bVNpemUpIG1ldGhvZCB3aGljaCAKICAgIGNyZWF0ZXMgYSBmaWx0ZXIgdGhhdCBhY2NlcHRzIGZpbGVzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHNpemUgcmFuZ2UuCgotIEZpbGVGaWx0ZXJVdGlscy5tYWtlRGlyZWN0b3J5T25seS9tYWtlRmlsZU9ubHkKICAtIHR3byBuZXcgbWV0aG9kcyB0aGF0IGRlY29yYXRlIGEgZmlsZSBmaWx0ZXIgdG8gbWFrZSBpdCBhcHBseSB0bwogICAgZGlyZWN0b3JpZXMgb25seSBvciBmaWxlcyBvbmx5CgotIE51bGxXcml0ZXIKICAtIE5ldyB3cml0ZXIgdGhhdCBhY3RzIGFzIGEgc2luayBmb3IgYWxsIGRhdGEsIGFzIHBlciAvZGV2L251bGwKCi0gTnVsbElucHV0U3RyZWFtCiAgLSBOZXcgaW5wdXQgc3RyZWFtIHRoYXQgZW11bGF0ZXMgYSBzdHJlYW0gb2YgYSBzcGVjaWZpZWQgc2l6ZQoKLSBOdWxsUmVhZGVyCiAgLSBOZXcgcmVhZGVyIHRoYXQgZW11bGF0ZXMgYSByZWFkZXIgb2YgYSBzcGVjaWZpZWQgc2l6ZQoKLSBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gIFtJTy05N10KICAtIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMS4yCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tcGF0aWJpbGl0eSB3aXRoIDEuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKRGVwcmVjYXRpb25zIGZyb20gMS4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQnVnIGZpeGVzIGZyb20gMS4xCi0tLS0tLS0tLS0tLS0tLS0tLQotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2UoZHJpdmUpCiAgRml4IHRvIGFsbG93IFdpbmRvd3MgYmFzZWQgY29tbWFuZCB0byBmdW5jdGlvbiBpbiBGcmVuY2ggbG9jYWxlCgotIEZpbGVVdGlscy5yZWFkKgogIEluY3JlYXNlIGNlcnRhaW50eSB0aGF0IGZpbGVzIGFyZSBjbG9zZWQgaW4gY2FzZSBvZiBlcnJvcgoKLSBMb2NrYWJsZUZpbGVXcml0ZXIKICBMb2NraW5nIG1lY2hhbmlzbSB3YXMgYnJva2VuIGFuZCBvbmx5IHByb3ZpZGVkIGxpbWl0ZWQgcHJvdGVjdGlvbiBbMzg5NDJdCiAgRmlsZSBkZWxldGlvbiBhbmQgbG9ja2luZyBpbiBjYXNlIG9mIGNvbnN0cnVjdG9yIGVycm9yIHdhcyBicm9rZW4KCkVuaGFuY2VtZW50cyBmcm9tIDEuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBBZ2VGaWxlRmlsdGVyL1NpemVGaWxlRmlsdGVyCiAgTmV3IGZpbGUgZmlsdGVycyB0aGF0IGNvbXBhcmVzIGFnYWluc3QgdGhlIGFnZSBhbmQgc2l6ZSBvZiB0aGUgZmlsZQoKLSBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlS2IoZHJpdmUpCiAgTmV3IG1ldGhvZCB0aGF0IHVuaWZpZXMgcmVzdWx0IHRvIGJlIGluIGtpbG9ieXRlcyBbMzg1NzRdCgotIEZpbGVVdGlscy5jb250ZW50RXF1YWxzKEZpbGUsRmlsZSkKICBQZXJmb3JtYW5jZSBpbXByb3ZlZCBieSBhZGRpbmcgbGVuZ3RoIGFuZCBmaWxlIGxvY2F0aW9uIGNoZWNraW5nCgotIEZpbGVVdGlscy5pdGVyYXRlRmlsZXMKICBUd28gbmV3IG1ldGhvZCB0byBwcm92aWRlIGRpcmVjdCBhY2Nlc3MgdG8gaXRlcmF0b3JzIG92ZXIgZmlsZXMKCi0gRmlsZVV0aWxzLmxpbmVJdGVyYXRvcgogIElPVXRpbHMubGluZUl0ZXJhdG9yCiAgTmV3IG1ldGhvZHMgdG8gcHJvdmlkZSBhbiBpdGVyYXRvciBvdmVyIHRoZSBsaW5lcyBpbiBhIGZpbGUgWzM4MDgzXQoKLSBGaWxlVXRpbHMuY29weURpcmVjdG9yeVRvRGlyZWN0b3J5CiAgTmV3IG1ldGhvZCB0byBjb3B5IGEgZGlyZWN0b3J5IHRvIHdpdGhpbiBhbm90aGVyIGRpcmVjdG9yeSBbMzYzMTVdCiAgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDEuMQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkluY29tcGF0aWJsZSBjaGFuZ2VzIGZyb20gMS4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcywgZXhjZXB0OgotIEZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZSgpCiAgICBBIG51bGwgZW5jb2RpbmcgcHJldmlvdXNseSB1c2VkICdJU08tODg1OS0xJywgbm93IGl0IHVzZXMgdGhlIHBsYXRmb3JtIGRlZmF1bHQKICAgIEdlbmVyYWxseSB0aGlzIHdpbGwgbWFrZSBubyBkaWZmZXJlbmNlCgotIExvY2thYmxlRmlsZVdyaXRlcgogICAgSW1wcm92ZWQgdmFsaWRhdGlvbiBhbmQgbm93IGNyZWF0ZSBkaXJlY3RvcmllcyBpZiBuZWNlc3NhcnkKCnBsdXMgdGhlc2UgYnVnIGZpeGVzIG1heSBhZmZlY3QgeW91IHNlbWFudGljYWxseToKLSBGaWxlVXRpbHMudG91Y2goKSAgKEJ1ZyBmaXggMjk4MjEpCiAgICBOb3cgY3JlYXRlcyB0aGUgZmlsZSBpZiBpdCBkaWQgbm90IHByZXZpb3VzbHkgZXhpc3QKCi0gRmlsZVV0aWxzLnRvRmlsZShVUkwpIChCdWcgZml4IDMyNTc1KQogICAgTm93IGhhbmRsZXMgZXNjYXBlIHN5bnRheCBzdWNoIGFzICUyMAoKLSBGaWxlVXRpbHMuc2l6ZU9mRGlyZWN0b3J5KCkgIChCdWcgZml4IDM2ODAxKQogICAgTWF5IG5vdyByZXR1cm4gYSBzaXplIG9mIDAgaWYgdGhlIGRpcmVjdG9yeSBpcyBzZWN1cml0eSByZXN0cmljdGVkCgpEZXByZWNhdGlvbnMgZnJvbSAxLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQ29weVV0aWxzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCiAgICBJdHMgbWV0aG9kcyBoYXZlIGJlZW4gbW92ZWQgdG8gSU9VdGlscy4KICAgIFRoZSBuZXcgSU9VdGlscyBtZXRob2RzIGhhbmRsZSBudWxscyBiZXR0ZXIsIGFuZCBoYXZlIGNsZWFyZXIgbmFtZXMuCgotIElPVXRpbHMudG9CeXRlQXJyYXkoU3RyaW5nKSAtIFVzZSB7QGxpbmsgU3RyaW5nI2dldEJ5dGVzKCl9Ci0gSU9VdGlscy50b1N0cmluZyhieXRlW10pIC0gVXNlIHtAbGluayBTdHJpbmcjU3RyaW5nKGJ5dGVbXSl9Ci0gSU9VdGlscy50b1N0cmluZyhieXRlW10sU3RyaW5nKSAtIFVzZSB7QGxpbmsgU3RyaW5nI1N0cmluZyhieXRlW10sU3RyaW5nKX0KCkJ1ZyBmaXhlcyBmcm9tIDEuMAotLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlVXRpbHMgLSB0b3VjaCgpICBbMjk4MjFdCiAgICBOb3cgY3JlYXRlcyB0aGUgZmlsZSBpZiBpdCBkaWQgbm90IHByZXZpb3VzbHkgZXhpc3QKCi0gRmlsZVV0aWxzIC0gdG9GaWxlKFVSTCkgIFszMjU3NV0KICAgIE5vdyBoYW5kbGVzIGVzY2FwZSBzeW50YXggc3VjaCBhcyAlMjAKCi0gRmlsZUZpbHRlclV0aWxzIC0gbWFrZUNWU0F3YXJlKElPRmlsZUZpbHRlcikgIFszMzAyM10KICAgIEZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCBtZXRob2QgdG8gYmUgY29tcGxldGVseSBicm9rZW4KCi0gQ291bnRpbmdJbnB1dFN0cmVhbSAgWzMzMzM2XQogICAgRml4ZWQgYnVnIHRoYXQgY2F1c2VkIHRoZSBjb3VudCB0byByZWR1Y2UgYnkgb25lIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbQoKLSBDb3VudGluZ0lucHV0U3RyZWFtIC0gc2tpcChsb25nKSAgWzM0MzExXQogICAgQnl0ZXMgZnJvbSBjYWxscyB0byB0aGlzIG1ldGhvZCB3ZXJlIG5vdCBwcmV2aW91c2x5IGNvdW50ZWQKCi0gTnVsbE91dHB1dFN0cmVhbSAgWzMzNDgxXQogICAgUmVtb3ZlIHVubmVjZXNzYXJ5IHN5bmNocm9uaXphdGlvbgoKLSBBYnN0cmFjdEZpbGVGaWx0ZXIgLSBhY2NlcHQoRmlsZSwgU3RyaW5nKSAgWzMwOTkyXQogICAgRml4ZWQgYnJva2VuIGltcGxlbWVudGF0aW9uCgotIEZpbGVVdGlscyAgWzM2ODAxXQogICAgUHJldmlvdXNseSB0aHJldyBOUEUgd2hlbiBsaXN0aW5nIGZpbGVzIGluIGEgc2VjdXJpdHkgcmVzdHJpY3RlZCBkaXJlY3RvcnkKICAgIE5vdyB0aHJvdyBJT0V4Y2VwdGlvbiB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UKCi0gRmlsZVV0aWxzIC0gd3JpdGVTdHJpbmdUb0ZpbGUoKQogICAgTnVsbCBlbmNvZGluZyBub3cgY29ycmVjdGx5IHVzZXMgdGhlIHBsYXRmb3JtIGRlZmF1bHQKCkVuaGFuY2VtZW50cyBmcm9tIDEuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlbmFtZVV0aWxzIC0gbmV3IGNsYXNzICBbMzMzMDMsMjkzNTFdCiAgICBBIHN0YXRpYyB1dGlsaXR5IGNsYXNzIGZvciB3b3JraW5nIHdpdGggZmlsZW5hbWVzCiAgICBTZWVrcyB0byBlYXNlIHRoZSBwYWluIG9mIGRldmVsb3Bpbmcgb24gV2luZG93cyBhbmQgZGVwbG95aW5nIG9uIFVuaXgKCi0gRmlsZVN5c3RlbVV0aWxzIC0gbmV3IGNsYXNzICBbMzI5ODIsMzYzMjVdCiAgICBBIHN0YXRpYyB1dGlsaXR5IGNsYXNzIGZvciB3b3JraW5nIHdpdGggZmlsZSBzeXN0ZW1zCiAgICBQcm92aWRlcyBvbmUgbWV0aG9kIGF0IHByZXNlbnQsIHRvIGdldCB0aGUgZnJlZSBzcGFjZSBvbiB0aGUgZmlsaW5nIHN5c3RlbQoKLSBJT1V0aWxzIC0gbmV3IHB1YmxpYyBjb25zdGFudHMKICAgIENvbnN0YW50cyBmb3IgZGlyZWN0b3J5IGFuZCBsaW5lIHNlcGFyYXRvcnMgb24gV2luZG93cyBhbmQgVW5peAoKLSBJT1V0aWxzIC0gdG9CeXRlQXJyYXkoUmVhZGVyLGVuY29kaW5nKQogICAgSGFuZGxlcyBlbmNvZGluZ3Mgd2hlbiByZWFkaW5nIHRvIGEgYnl0ZSBhcnJheQoKLSBJT1V0aWxzIC0gdG9DaGFyQXJyYXkoSW5wdXRTdHJlYW0pICBbMjg5NzldCiAgICAgICAgICAtIHRvQ2hhckFycmF5KElucHV0U3RyZWFtLGVuY29kaW5nKQogICAgICAgICAgLSB0b0NoYXJBcnJheShSZWFkZXIpCiAgICBSZWFkcyBhIHN0cmVhbS9yZWFkZXIgaW50byBhIGNoYXJhY3RlciBhcnJheQoKLSBJT1V0aWxzIC0gcmVhZExpbmVzKElucHV0U3RyZWFtKSAgWzM2MjE0XQogICAgICAgICAgLSByZWFkTGluZXMoSW5wdXRTdHJlYW0sZW5jb2RpbmcpCiAgICAgICAgICAtIHJlYWRMaW5lcyhSZWFkZXIpCiAgICBSZWFkcyBhIHN0cmVhbS9yZWFkZXIgbGluZSBieSBsaW5lIGludG8gYSBMaXN0IG9mIFN0cmluZ3MKCi0gSU9VdGlscyAtIHRvSW5wdXRTdHJlYW0oU3RyaW5nKSAgWzMyOTU4XQogICAgICAgICAgLSB0b0lucHV0U3RyZWFtKFN0cmluZyxlbmNvZGluZykKICAgIENyZWF0ZXMgYW4gaW5wdXQgc3RyZWFtIHRoYXQgdXNlcyB0aGUgc3RyaW5nIGFzIGEgc291cmNlIG9mIGRhdGEKCi0gSU9VdGlscyAtIHdyaXRlTGluZXMoQ29sbGVjdGlvbixsaW5lRW5kaW5nLE91dHB1dFN0cmVhbSkgIFszNjIxNF0KICAgICAgICAgIC0gd3JpdGVMaW5lcyhDb2xsZWN0aW9uLGxpbmVFbmRpbmcsT3V0cHV0U3RyZWFtLGVuY29kaW5nKQogICAgICAgICAgLSB3cml0ZUxpbmVzKENvbGxlY3Rpb24sbGluZUVuZGluZyxXcml0ZXIpCiAgICBXcml0ZXMgYSBjb2xsZWN0aW9uIHRvIGEgc3RyZWFtL3dyaXRlciBsaW5lIGJ5IGxpbmUKCi0gSU9VdGlscyAtIHdyaXRlKC4uLikKICAgIFdyaXRlIGRhdGEgdG8gYSBzdHJlYW0vd3JpdGVyIChtb3ZlZCBmcm9tIENvcHlVdGlscyB3aXRoIGJldHRlciBudWxsIGhhbmRsaW5nKQoKLSBJT1V0aWxzIC0gY29weSguLi4pCiAgICBDb3B5IGRhdGEgYmV0d2VlbiBzdHJlYW1zIChtb3ZlZCBmcm9tIENvcHlVdGlscyB3aXRoIGJldHRlciBudWxsIGhhbmRsaW5nKQoKLSBJT1V0aWxzIC0gY29udGVudEVxdWFscyhSZWFkZXIsUmVhZGVyKQogICAgTWV0aG9kIHRvIGNvbXBhcmUgdGhlIGNvbnRlbnRzIG9mIHR3byByZWFkZXJzCgotIEZpbGVVdGlscyAtIHRvRmlsZXMoVVJMW10pCiAgICBDb252ZXJ0cyBhbiBhcnJheSBvZiBVUkxzIHRvIGFuIGFycmF5IG9mIEZpbGVzCgotIEZpbGVVdGlscyAtIGNvcHlEaXJlY3RvcnkoKSAgWzMyOTQ0XQogICAgTmV3IG1ldGhvZHMgdG8gY29weSBhIGRpcmVjdG9yeQoKLSBGaWxlVXRpbHMgLSByZWFkRmlsZVRvQnl0ZUFycmF5KEZpbGUpCiAgICBSZWFkcyBhbiBlbnRpcmUgZmlsZSBpbnRvIGEgYnl0ZSBhcnJheQoKLSBGaWxlVXRpbHMgLSB3cml0ZUJ5dGVBcnJheVRvRmlsZShGaWxlLGJ5dGVbXSkKICAgIFdyaXRlcyBhIGJ5dGUgYXJyYXkgdG8gYSBmaWxlCgotIEZpbGVVdGlscyAtIHJlYWRMaW5lcyhGaWxlLGVuY29kaW5nKSAgWzM2MjE0XQogICAgUmVhZHMgYSBmaWxlIGxpbmUgYnkgbGluZSBpbnRvIGEgTGlzdCBvZiBTdHJpbmdzCgotIEZpbGVVdGlscyAtIHdyaXRlTGluZXMoRmlsZSxlbmNvZGluZyxMaXN0KQogICAgICAgICAgICAgIHdyaXRlTGluZXMoRmlsZSxlbmNvZGluZyxMaXN0LGxpbmVFbmRpbmcpCiAgICBXcml0ZXMgYSBjb2xsZWN0aW9uIHRvIGEgZmlsZSBsaW5lIGJ5IGxpbmUKCi0gRmlsZVV0aWxzIC0gRU1QVFlfRklMRV9BUlJBWQogICAgQ29uc3RhbnQgZm9yIGFuIGVtcHR5IGFycmF5IG9mIEZpbGUgb2JqZWN0cwoKLSBDb25kaXRpb25hbEZpbGVGaWx0ZXIgLSBuZXcgaW50ZXJmYWNlICBbMzA3MDVdCiAgICBEZWZpbmVzIHRoZSBiZWhhdmlvciBvZiBsaXN0IGJhc2VkIGZpbHRlcnMKCi0gQW5kRmlsZUZpbHRlciwgT3JGaWxlRmlsdGVyICBbMzA3MDVdCiAgICBOb3cgc3VwcG9ydCBhIGxpc3Qgb2YgZmlsdGVycyB0byBhbmQvb3IKCi0gV2lsZGNhcmRGaWx0ZXIgIFszMTExNV0KICAgIE5ldyBmaWx0ZXIgdGhhdCBjYW4gbWF0Y2ggdXNpbmcgd2lsZGNhcmQgZmlsZSBuYW1lcwoKLSBGaWxlRmlsdGVyVXRpbHMgLSBtYWtlU1ZOQXdhcmUoSU9GaWxlRmlsdGVyKQogICAgTmV3IG1ldGhvZCwgbGlrZSBtYWtlQ1ZTQXdhcmUsIHRoYXQgaWdub3JlcyBTdWJ2ZXJzaW9uIHNvdXJjZSBjb250cm9sIGRpcmVjdG9yaWVzCgotIENsYXNzTG9hZGVyT2JqZWN0SW5wdXRTdHJlYW0KICAgIEFuIE9iamVjdElucHV0U3RyZWFtIHRoYXQgc3VwcG9ydHMgYSBDbGFzc0xvYWRlcgoKLSBDb3VudGluZ0lucHV0U3RyZWFtLENvdW50aW5nT3V0cHV0U3RyZWFtIC0gcmVzZXRDb3VudCgpICBbMjg5NzZdCiAgICBBZGRzIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjb3VudCBwYXJ0IHdheSB0aHJvdWdoIHJlYWRpbmcvd3JpdGluZyB0aGUgc3RyZWFtCgotIERlZmVycmVkRmlsZU91dHB1dFN0cmVhbSAtIHdyaXRlVG8oT3V0cHV0U3RyZWFtKSAgWzM0MTczXQogICAgTmV3IG1ldGhvZCB0byBhbGxvdyBjdXJyZW50IGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gYSBzdHJlYW0KCi0gRGVmZXJyZWRGaWxlT3V0cHV0U3RyZWFtICBbMzQxNDJdCiAgICBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGF2b2lkaW5nIGRvdWJsZSBidWZmZXJpbmcKCi0gTG9ja2FibGVGaWxlV3JpdGVyIC0gZW5jb2Rpbmcgc3VwcG9ydCBbMzY4MjVdCiAgICBBZGQgc3VwcG9ydCBmb3IgY2hhcmFjdGVyIGVuY29kaW5ncyB0byBMb2NrYWJsZUZpbGVXcml0ZXIKICAgIEltcHJvdmUgdGhlIHZhbGlkYXRpb24KICAgIENyZWF0ZSBkaXJlY3RvcmllcyBpZiBuZWNlc3NzYXJ5CgotIElPVXRpbHMgYW5kIEVuZGlhblV0aWxzIGFyZSBubyBsb25nZXIgZmluYWwgIFsyODk3OF0KICAgIEFsbG93cyBkZXZlbG9wZXJzIHRvIGhhdmUgc3ViY2xhc3NlcyBpZiBkZXNpcmVkICAgCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRmVlZGJhY2sKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpPcGVuIHNvdXJjZSB3b3JrcyBiZXN0IHdoZW4geW91IGdpdmUgZmVlZGJhY2s6Cmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2lvLwoKUGxlYXNlIGRpcmVjdCBhbGwgYnVnIHJlcG9ydHMgdG8gSklSQQpodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPCgpPciBzdWJzY3JpYmUgdG8gdGhlIGNvbW1vbnMtdXNlciBtYWlsaW5nIGxpc3QgKHByZWZpeCBlbWFpbHMgYnkgW2lvXSkKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvbWFpbC1saXN0cy5odG1sCgpUaGUgQ29tbW9ucy1JTyBUZWFtCg==