QXBhY2hlIENvbW1vbnMgSU8gClZlcnNpb24gMi44LjAKUmVsZWFzZSBOb3RlcwoKSU5UUk9EVUNUSU9OOgoKQ29tbW9ucyBJTyBpcyBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgbGlrZSBqYXZhLmlvLiAgCkNsYXNzZXMgaW4gdGhpcyBwYWNrYWdlIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvIHN0YW5kYXJkIGFuZCBvZiBzdWNoIGhpZ2ggCnJldXNlIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEuaW8uCgpUaGUgQXBhY2hlIENvbW1vbnMgSU8gbGlicmFyeSBjb250YWlucyB1dGlsaXR5IGNsYXNzZXMsIHN0cmVhbSBpbXBsZW1lbnRhdGlvbnMsIGZpbGUgZmlsdGVycywKZmlsZSBjb21wYXJhdG9ycywgZW5kaWFuIHRyYW5zZm9ybWF0aW9uIGNsYXNzZXMsIGFuZCBtdWNoIG1vcmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjguMAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSmF2YSA4IHJlcXVpcmVkLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmlvLmlucHV0LkNpcmN1bGFySW5wdXRTdHJlYW0uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uZmlsZS5QYXRoVXRpbHMuY2xlYW5EaXJlY3RvcnkoUGF0aCwgRmlsZVZpc2l0T3B0aW9uLi4uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5pby5maWxlLlBhdGhVdGlscy5kZWxldGVEaXJlY3RvcnkoUGF0aCwgRmlsZVZpc2l0T3B0aW9uLi4uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gQWRkIE51bGxBcHBlbmRhYmxlLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBBZGQgUGF0aFV0aWxzLmdldEFjbEVudHJ5TGlzdChQYXRoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gTnVsbC1ndWFyZCBJT1V0aWxzLmNsb3NlKENsb3NlYWJsZSwgSU9Db25zdW1lcikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIEFkZCBSZXZlcnNlZExpbmVzRmlsZVJlYWRlci5yZWFkTGluZXMoaW50KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gQWRkIFJldmVyc2VkTGluZXNGaWxlUmVhZGVyLnRvU3RyaW5nKGludCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY4NDogIEFkZCBQYXRoVXRpbHMuZGVsZXRlKFBhdGgsIERlbGV0ZU9wdGlvbi4uLikuCiAgICAgICAgQWRkIFBhdGhVdGlscy5kZWxldGVEaXJlY3RvcnkoUGF0aCwgRGVsZXRlT3B0aW9uLi4uKS4KICAgICAgICBBZGQgUGF0aFV0aWxzLmRlbGV0ZUZpbGUoUGF0aCwgRGVsZXRlT3B0aW9uLi4uKS4KICAgICAgICBBZGQgUGF0aFV0aWxzLnNldFJlYWRPbmx5KFBhdGgsIGJvb2xlYW4sIExpbmtPcHRpb24uLi4pLgogICAgICAgIEFkZCBDbGVhbmluZ1BhdGhWaXNpdG9yLkNsZWFuaW5nUGF0aFZpc2l0b3IoUGF0aENvdW50ZXJzLCBEZWxldGVPcHRpb25bXSwgU3RyaW5nLi4uKS4KICAgICAgICBBZGQgRGVsZXRpbmdQYXRoVmlzaXRvci5EZWxldGluZ1BhdGhWaXNpdG9yKFBhdGhDb3VudGVycywgRGVsZXRlT3B0aW9uW10sIFN0cmluZy4uLikuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnksIFJvYmluIEphbnNvaG4uIApvIEFkZCBSYW5kb21BY2Nlc3NGaWxlSW5wdXRTdHJlYW0uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY4MTogIElPVXRpbHMuY2xvc2UoQ2xvc2VhYmxlKSBzaG91bGQgYWxsb3cgYSBsaXN0IG9mIGNsb3NlYWJsZXMuIApvIEFkZCBJT1V0aWxzLmNvbnN1bWUoSW5wdXRTdHJlYW0pLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02NzY6ICBBZGQgaXNGaWxlTmV3ZXIoKSBhbmQgaXNGaWxlT2xkZXIoKSBtZXRob2RzIHRoYXQgc3VwcG9ydCB0aGUgSmF2YSA4IERhdGUvVGltZSBBUEkuICMxMjQuIFRoYW5rcyB0byBJc2lyYSBTZW5ldmlyYXRuZSwgR2FyeSBHcmVnb3J5LiAKbyBBZGQgYSBNYXJrU2hpZWxkSW5wdXRTdHJlYW0gIzExOS4gVGhhbmtzIHRvIEFkYW0gUmV0dGVyLCBHYXJ5IEdyZWdvcnkuIApvIERlcHJlY2F0ZSBJT1V0aWxzLkxJTkVfU0VQQVJBVE9SIGluIGZhdm9yIG9mIEphdmEgNydzIFN5c3RlbS5saW5lU2VwYXJhdG9yKCkuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIAoKRml4ZWQgQnVnczoKbyBDaGFyU2VxdWVuY2VSZWFkZXIuc2tpcCBzaG91bGQgcmV0dXJuIDAgaW5zdGVhZCBvZiBFT0Ygb24gc3RyZWFtIGVuZCAjMTIzLiBUaGFua3MgdG8gUm9iIFNwb29yLCBKb2NoZW4gV2llZG1hbm4uIApvIEltcGxlbWVudCBDaGFyU2VxdWVuY2VSZWFkZXIucmVhZHkoKSAjMTIyLiBUaGFua3MgdG8gUm9iIFNwb29yLiAKbyBJTy02Njk6ICBGaXggY29kZSBzbWVsbHM7IGZpeCB0eXBvcyAjMTE1LiBUaGFua3MgdG8gWGVub0FtZXNzLCBHYXJ5IEdyZWdvcnkuIApvIEFkZCBjYWNoaW5nIGZvciByZXF1aXJlZCBjaGFyc2V0cyAjMTIwLiBUaGFua3MgdG8gSmVyb21lIFdvbGZmLCBHYXJ5IEdyZWdvcnkuIApvIElPLTY3MzogIE1ha2Ugc29tZSBzaW1wbGlmaWNhdGlvbnMgIzEyMS4gVGhhbmtzIHRvIEplcm9tZSBXb2xmZi4gCm8gSU8tNjc0OiAgSW5maW5pdGVDaXJjdWxhcklucHV0U3RyZWFtIGlzIG5vdCBpbmZpbml0ZSBpZiBpdHMgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIC0xLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02NzU6ICBJbmZpbml0ZUNpcmN1bGFySW5wdXRTdHJlYW0gdGhyb3dzIGEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uIHdoZW4gcmVhZGluZyBpZiBpdHMgaW5wdXQgYnVmZmVyIGlzIHNpemUgMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjc3OiAgRmlsZVN5c3RlbS5nZXRDdXJyZW50KCkgZG9lcyBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IGVudW0uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY3OTogIGlucHV0LkFic3RyYWN0Q2hhcmFjdGVyRmlsdGVyUmVhZGVyIHBhc3NlcyBjb3VudCBvZiBjaGFycyByZWFkICMxMzIuIFRoYW5rcyB0byBwcm9uZWVsLiAKbyBJTy02ODM6ICBDaXJjdWxhckJ1ZmZlcklucHV0U3RyZWFtLnJlYWQoKSBmYWlscyB0byBjb252ZXJ0IGJ5dGUgdG8gdW5zaWduZWQgaW50IApvIEZpeCBTcG90QnVncyBpc3N1ZXMgaW4gb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlscy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjcyOiAgQ29weWluZyBhIEZpbGUgc2V0cyBsYXN0IG1vZGlmaWVkIGRhdGUgdG8gMDEgSmFudWFyeSAxOTcwLiAKbyBJTy02NzY6ICBQcmV2ZW50IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIFJldmVyc2VkTGluZXNGaWxlUmVhZGVyIGNvbnN0cnVjdG9ycyAjMTE3LiBUaGFua3MgdG8gTWljaGFlbCBFcm5zdCwgR2FyeSBHcmVnb3J5LiAKCkNoYW5nZXM6Cm8gUmVwbGFjZSBGaW5kQnVncyB3aXRoIFNwb3RCdWdzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBtYXZlbi1jaGVja3N0eWxlLXBsdWdpbiAzLjEuMCAtPiAzLjEuMS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gVXBkYXRlIHRlc3RzIGZyb20gb3JnLmFwYWNoZS5jb21tb25zOmNvbW1vbnMtbGFuZzMgMy4xMCB0byAzLjExLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBVcGRhdGUgY29tbW9ucy1wYXJlbnQgZnJvbSA1MCB0byA1MSAjMTI5LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBVcGRhdGUgYWN0aW9ucy9jaGVja291dCBmcm9tIHYxIHRvIHYyLjMuMSAjMTI2LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBVcGRhdGUganVuaXQtcGlvbmVlciBmcm9tIDAuNi4wIHRvIDAuOC4wLCAjMTI3LCAjMTM1LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBVcGRhdGUgbW9ja2l0by1jb3JlIGZyb20gMy4zLjMgdG8gMy41LjkgIzEyOCwgIzEzMywgIzE0NSwgIzE0OSwgIzE1MS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gVXBkYXRlIHNwb3RidWdzIGZyb20gNC4wLjYgdG8gNC4xLjEgIzEzNC4gVGhhbmtzIHRvIERlcGVuZGFib3QuIApvIFVwZGF0ZSBqdW5pdC1waW9uZWVyIGZyb20gMC44LjAgdG8gMC45LjAgIzEzOC4gVGhhbmtzIHRvIERlcGVuZGFib3QuIApvIFVwZGF0ZSBhY3Rpb25zL2NoZWNrb3V0IGZyb20gdjIuMy4xIHRvIHYyLjMuMiAjMTQwLiBUaGFua3MgdG8gRGVwZW5kYWJvdC4gCm8gVXBkYXRlIGFjdGlvbnMvc2V0dXAtamF2YSBmcm9tIHYxLjQuMCB0byB2MS40LjIgIzE0MSwgIzE0OC4gVGhhbmtzIHRvIERlcGVuZGFib3QuIAoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuNzoKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IFllcy4KU2VtYW50aWMgY29tcGF0aWJsZTogWWVzLgoKQ29tbW9ucyBJTyAyLjcgcmVxdWlyZXMgSmF2YSA4LgpDb21tb25zIElPIDIuNiByZXF1aXJlcyBKYXZhIDcuCkNvbW1vbnMgSU8gMi41IHJlcXVpcmVzIEphdmEgNi4KQ29tbW9ucyBJTyAyLjQgcmVxdWlyZXMgSmF2YSA2LgpDb21tb25zIElPIDIuMyByZXF1aXJlcyBKYXZhIDYuCkNvbW1vbnMgSU8gMi4yIHJlcXVpcmVzIEphdmEgNS4KQ29tbW9ucyBJTyAxLjQgcmVxdWlyZXMgSmF2YSAxLjMuCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtaW8vY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIElPLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgSU8gd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWlvLwoKRG93bmxvYWQgcGFnZTogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtaW8vZG93bmxvYWRfaW8uY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQXBhY2hlIENvbW1vbnMgSU8gClZlcnNpb24gMi43ClJlbGVhc2UgTm90ZXMKCklOVFJPRFVDVElPTjoKCkNvbW1vbnMgSU8gaXMgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGxpa2UgamF2YS5pby4gIApDbGFzc2VzIGluIHRoaXMgcGFja2FnZSBhcmUgY29uc2lkZXJlZCB0byBiZSBzbyBzdGFuZGFyZCBhbmQgb2Ygc3VjaCBoaWdoIApyZXVzZSBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmlvLgoKVGhlIEFwYWNoZSBDb21tb25zIElPIGxpYnJhcnkgY29udGFpbnMgdXRpbGl0eSBjbGFzc2VzLCBzdHJlYW0gaW1wbGVtZW50YXRpb25zLCBmaWxlIGZpbHRlcnMsCmZpbGUgY29tcGFyYXRvcnMsIGVuZGlhbiB0cmFuc2Zvcm1hdGlvbiBjbGFzc2VzLCBhbmQgbXVjaCBtb3JlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMi43Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpKYXZhIDggcmVxdWlyZWQuCgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvICAgICAgICAgICBBZGRpbmcgdGhlIENpcmN1bGFyQnVmZmVySW5wdXRTdHJlYW0sIGFuZCB0aGUgUGVla2FibGVJbnB1dFN0cmVhbS4gCm8gSU8tNTUzOiAgQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlbmFtZVV0aWxzLmlzSWxsZWdhbFdpbmRvd3NGaWxlTmFtZShjaGFyKS4gCm8gSU8tNTc3OiAgQWRkIHJlYWRlcnMgdG8gZmlsdGVyIG91dCBnaXZlbiBjaGFyYWN0ZXJzOiBDaGFyYWN0ZXJTZXRGaWx0ZXJSZWFkZXIgYW5kIENoYXJhY3RlckZpbHRlclJlYWRlci4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNTk0OiAgQWRkIElPVXRpbHMgY29weSBtZXRob2RzIHdpdGggamF2YS5sYW5nLkFwcGVuZGFibGUgYXMgdGhlIHRhcmdldC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjA1OiAgQWRkIGNsYXNzIENhbkV4ZWN1dGVGaWxlRmlsdGVyLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy01Nzg6ICBTdXBwb3J0IGphdmEubmlvLlBhdGggYW5kIG5vbi1kZWZhdWx0IGZpbGUgc3lzdGVtcyBmb3IgUmV2ZXJzZWRMaW5lc0ZpbGVSZWFkZXIgKCM2MikuIFRoYW5rcyB0byBNYXJrIENoZXNuZXkuIApvIElPLTYwODogIEFkZCBhIGNvbnZlbmllbmNlIE51bGxQcmludFN0cmVhbS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjEyOiAgQWRkIGNsYXNzIFRlZVJlYWRlci4gVGhhbmtzIHRvIFJvYiBTcG9vciwgR2FyeSBHcmVnb3J5LiAKbyBJTy02MTM6ICBBZGQgY2xhc3NlcyBDbG9zZWRSZWFkZXIgYW5kIENsb3NlU2hpZWxkUmVhZGVyLiAjODQuIFRoYW5rcyB0byBSb2IgU3Bvb3IsIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjE0OiAgQWRkIGNsYXNzZXMgVGFnZ2VkV3JpdGVyLCBDbG9zZWRXcml0ZXIgYW5kIEJyb2tlbldyaXRlci4gIzg2LiBUaGFua3MgdG8gUm9iIFNwb29yLiAKbyBJTy02MTU6ICBBZGQgY2xhc3NlcyBUZWVXcml0ZXIsIEZpbHRlckNvbGxlY3Rpb25Xcml0ZXIsIFByb3h5Q29sbGVjdGlvbldyaXRlciwgSU9FeGNlcHRpb25MaXN0LCBJT0luZGV4ZWRFeGNlcHRpb24uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnksIFJvYiBTcG9vci4gCm8gSU8tNjE2OiAgQWRkIGNsYXNzIEFwcGVuZGFibGVXcml0ZXIuICM4Ny4gVGhhbmtzIHRvIFJvYiBTcG9vci4gCm8gSU8tNjE3OiAgQWRkIGNsYXNzIENsb3NlU2hpZWxkV3JpdGVyLiAjODMuIFRoYW5rcyB0byBSb2IgU3Bvb3IsIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjE4OiAgQWRkIGNsYXNzZXMgQWRkZWQgVGFnZ2VkUmVhZGVyLCBDbG9zZWRSZWFkZXIgYW5kIEJyb2tlblJlYWRlci4gIzg1LiBUaGFua3MgdG8gUm9iIFNwb29yLiAKbyBJTy02MTk6ICBTdXBwb3J0IHN1YiBzZXF1ZW5jZXMgaW4gQ2hhclNlcXVlbmNlUmVhZGVyLiAjOTEuIFRoYW5rcyB0byBSb2IgU3Bvb3IuIApvIElPLTYzMTogIEFkZCBhIENvdW50aW5nRmlsZVZpc2l0b3IgKGFzIHRoZSBiYXNpcyBmb3IgYSBmb3J0aGNvbWluZyBEZWxldGluZ0ZpbGVWaXNpdG9yKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjMyOiAgQWRkIFBhdGhVdGlscyBmb3Igb3BlcmF0aW9ucyBvbiBOSU8gUGF0aC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjMzOiAgQWRkIERlbGV0aW5nRmlsZVZpc2l0b3IuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTYzNTogIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSU9VdGlscy5jbG9zZShDbG9zZWFibGUpLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02MzY6ICBBZGQgYW5kIHJldXNlIG9yZy5hcGFjaGUuY29tbW9ucy5pby5JT1V0aWxzLmNsb3NlUXVpdGVseShDbG9zZWFibGUsIENvbnN1bWVyPElPRXhjZXB0aW9uPikuCiAgICAgICAgICAgQWRkIGFuZCByZXVzZSBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSU9VdGlscy5jbG9zZShDbG9zZWFibGUsIElPQ29uc3VtZXI8SU9FeGNlcHRpb24+KS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjQ1OiAgQWRkIG9yZy5hcGFjaGUuY29tbW9ucy5pby5maWxlLlBhdGhVdGlscy5maWxlQ29udGVudEVxdWFscyhQYXRoLCBQYXRoLCBPcGVuT3B0aW9uLi4uKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNDU4OiAgQWRkIGEgU2VxdWVuY2VSZWFkZXIgc2ltaWxhciB0byBqYXZhLmlvLlNlcXVlbmNlSW5wdXRTdHJlYW0uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnksIEpvc2h1YSBHaXRsaW4uIApvIElPLTY0ODogIEltcGxlbWVudCBkaXJlY3RvcnkgY29udGVudCBlcXVhbGl0eS4gMTAwIy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjQ4OiAgUmVmYWN0b3IgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGludG8gc3luY2hyb25pemVkIGFuZCB1bnN5bmNocm9uaXplZCB2ZXJzaW9ucyAjMTA4LiBUaGFua3MgdG8gQWRhbSBSZXR0ZXIsIEFsZXggSGVyYmVydCwgR2FyeSBHcmVnb3J5LiAKbyBJTy02NjI6ICBSZWZhY3RvciBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gaW50byBzeW5jaHJvbml6ZWQgYW5kIHVuc3luY2hyb25pemVkIHZlcnNpb25zICMxMDguIFRoYW5rcyB0byBBZGFtIFJldHRlciwgR2FyeSBHcmVnb3J5LiAKCkZpeGVkIEJ1Z3M6Cm8gSU8tNTg5OiAgU29tZSB0ZXN0cyBmYWlsIGlmIHRoZSBiYXNlIHBhdGggY29udGFpbnMgYSBzcGFjZS4gCm8gSU8tNTgyOiAgTWFrZSBtZXRob2RzIGluIE9ic2VydmFibGVJbnB1dFN0cmVhbS5PYnNldmVyIHB1YmxpYy4gVGhhbmtzIHRvIEJydW5vIFBhbG9zLiAKbyBJTy01MzU6ICBUaHJlYWQgYnVnIGluIEZpbGVBbHRlcmF0aW9uTW9uaXRvciNzdG9wKGludCkuIFRoYW5rcyB0byBTdmV0bGluIFphcmV2LCBBbnRob255IFJheW1vbmQuIApvIElPLTU1NzogIFBlcmZvcm0gbG9jYWxlIGluZGVwZW5kZW50IHVwcGVyIGNhc2UgY29udmVyc2lvbnMuIFRoYW5rcyB0byBsdWNjaW9tYW4uIApvIElPLTU3MDogIE1pc3NpbmcgSmF2YWRvYyBpbiBGaWxlbmFtZVV0aWxzIGNhdXNpbmcgVHJhdmlzLUNJIGJ1aWxkIHRvIGZhaWwuIFRoYW5rcyB0byBQcmFuZXQgVmVybWEuIApvIElPLTU3MTogIFJlbW92ZSByZWR1bmRhbnQgaXNEaXJlY3RvcnkoKSBjaGVjayBpbiBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzLmxpc3RGaWxlc0FuZERpcnMoRmlsZSwgSU9GaWxlRmlsdGVyLCBJT0ZpbGVGaWx0ZXIpLiBUaGFua3MgdG8gcHJhbmV0LiAKbyBJTy01NTk6ICBGaWxlbmFtZVV0aWxzLm5vcm1hbGl6ZSBub3cgdmVyaWZpZXMgaG9zdG5hbWUgc3ludGF4IGluIFVOQyBwYXRoLiAKbyBJTy01NTQ6ICBGaWxlVXRpbHMuY29weVRvRmlsZShJbnB1dFN0cmVhbSBzb3VyY2UsIEZpbGUgZGVzdGluYXRpb24pIHNob3VsZCBub3QgY2xvc2UgaW5wdXQgc3RyZWFtLiBUaGFua3MgdG8gTWljaGVsZSBNYXJpb3R0aS4gCm8gSU8tNjA0OiAgRmlsZVV0aWxzLmRvQ29weUZpbGUoRmlsZSwgRmlsZSwgYm9vbGVhbikgY2FuIHRocm93IENsb3NlZEJ5SW50ZXJydXB0RXhjZXB0aW9uLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02MjU6ICBDb3JyZWN0ZWQgbWlzbGVhZGluZyBleGNlcHRpb24gbWVzc2FnZSBmb3IgRmlsZVV0aWxzLmNvcHlEaXJlY3RvcnlUb0RpcmVjdG9yeS4gVGhhbmtzIHRvIE1pa2tvIE1hdW51LiAKbyBJTy02MjY6ICBBIG1pc3Rha2UgaW4gdGhlIEZpbGVuYW1lVXRpbHMuY29uY2F0KCkncyBKYXZhZG9jIGFib3V0IGFuIGFic29sdXRlIHBhdGguIFRoYW5rcyB0byBZdWppIEtvbmlzaGkuIApvIElPLTY0MDogIE5QRSBpbiBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSU9VdGlscy5jb250ZW50RXF1YWxzKElucHV0U3RyZWFtLCBJbnB1dFN0cmVhbSkgd2hlbiBvbmx5IG9uZSBpbnB1dCBpcyBudWxsLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02NDE6ICBOUEUgaW4gb3JnLmFwYWNoZS5jb21tb25zLmlvLklPVXRpbHMuY29udGVudEVxdWFscyhSZWFkZXIsIFJlYWRlcikgd2hlbiBvbmx5IG9uZSBpbnB1dCBpcyBudWxsLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02NDM6ICBOUEUgaW4gb3JnLmFwYWNoZS5jb21tb25zLmlvLklPVXRpbHMuY29udGVudEVxdWFsc0lnbm9yZUVPTChSZWFkZXIsIFJlYWRlcikgd2hlbiBvbmx5IG9uZSBpbnB1dCBpcyBudWxsLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyBJTy02NDQ6ICBOUEUgaW4gb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlscy5jb250ZW50RXF1YWxzSWdub3JlRU9MKEZpbGUsIEZpbGUpIHdoZW4gb25seSBvbmUgaW5wdXQgaXMgbnVsbC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjY0OiAgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlscy5jb3B5VVJMVG9GaWxlKCopIG9wZW4gYnV0IGRvIG5vdCBjbG9zZSBzdHJlYW1zLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKCkNoYW5nZXM6Cm8gSU8tNTcyOiAgUmVmYWN0b3IgZHVwbGljYXRlIGNvZGUgaW4gb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlscy4gVGhhbmtzIHRvIFByYW5ldCBWZXJtYS4gCm8gSU8tNTgwOiAgVXBkYXRlIG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlbmFtZVV0aWxzLmlzRXh0ZW5zaW9uKFN0cmluZywgU3RyaW5nW10pIHRvIHVzZSB2YXIgYXJncy4gCm8gSU8tNzAxOiAgTWFrZSBhcnJheSBkZWNsYXJhdGlvbiBpbiBUaHJlc2hvbGRpbmdPdXRwdXRTdHJlYW0gY29uc2lzdGVudCB3aXRoIG90aGVyIGFycmF5IGRlY2xhcmF0aW9ucyBpbiB0aGUgbGlicmFyeSAjNzcuIFRoYW5rcyB0byBSYXltb25kIFRhbi4gCm8gSU8tNjA3OiAgVXBkYXRlIGZyb20gSmF2YSA3IHRvIEphdmEgOC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjEwOiAgUmVtb3ZlIHRocm93cyBJT0V4Y2VwdGlvbiBpbiBtZXRob2QgaXNTeW1saW5rKCkgIzgwLiBUaGFua3MgdG8gU2ViYXN0aWFuLiAKbyBJTy02Mjg6ICBNaWdyYXRpb24gdG8gSlVuaXQgSnVwaXRlciAjOTcuIFRoYW5rcyB0byBBbGxvbiBNdXJlaW5pay4gCm8gSU8tNjMwOiAgRGVwcmVjYXRlIG9yZy5hcGFjaGUuY29tbW9ucy5pby5vdXRwdXQuTnVsbE91dHB1dFN0cmVhbS5OdWxsT3V0cHV0U3RyZWFtKCkgaW4gZmF2b3Igb2Ygb3JnLmFwYWNoZS5jb21tb25zLmlvLm91dHB1dC5OdWxsT3V0cHV0U3RyZWFtLk5VTExfT1VUUFVUX1NUUkVBTS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gSU8tNjI5OiAgRmlsZVV0aWxzI2ZvcmNlRGVsZXRlIHNob3VsZCB1c2UgRmlsZXMjZGVsZXRlIHJhdGhlciB0aGFuIEZpbGUjZGVsZXRlIHNvIGV4Y2VwdGlvbiBtZXNzYWdlcyBpbmNsdWRlcyByZWFzb24gZm9yIGZhaWx1cmUuIFRoYW5rcyB0byBJYW4gU3ByaW5nZXIsIElhbiBTcHJpbmdlciwgR2FyeSBHcmVnb3J5LiAKbyBJTy02MzQ6ICBNYWtlIGdldENhdXNlIHN5bmNocm9uaXplZCBhbmQgdXNlIGEgRGVxdWUgaW5zdGVhZCBvZiBhIFN0YWNrICM2NC4gVGhhbmtzIHRvIFbhY2xhdiBIYWlzbWFuLCBCcnVubyBQLiBLaW5vc2hpdGEsIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgICBVcGRhdGUgdGVzdHMgZnJvbSBBcGFjaGUgQ29tbW9ucyBMYW5nIDMuOSB0byAzLjEwLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyAgICAgICAgICAgIFVwZGF0ZSB0ZXN0cyBvcmcuanVuaXQtcGlvbmVlcjpqdW5pdC1waW9uZWVyIDAuMy4wIC0+IDAuNi4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyAgICAgICAgICAgIFVwZGF0ZSB0ZXN0cyBvcmcuanVuaXQuanVwaXRlcjpqdW5pdC1qdXBpdGVyIDUuNS4yIC0+IDUuNi4yLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LiAKbyAgICAgICAgICAgIFVwZGF0ZSB0ZXN0cyBvcmcubW9ja2l0bzptb2NraXRvLWNvcmUgMy4wLjAgLT4gMy4zLjMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY2NjogIE5vcm1hbGl6ZSBpbnRlcm5hbCBidWZmZXJzIHRvIDgxOTIgYnl0ZXMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY2NTogIEVuc3VyZSB0aGF0IHBhc3NpbmcgYSBudWxsIElucHV0U3RyZWFtIHJlc3VsdHMgaW4gTlBFIHdpdGggdGVzdHMgIzExMi4gVGhhbmtzIHRvIE90dG8gRm93bGVyLCBHYXJ5IEdyZWdvcnkuIApvICAgICAgICAgICAgY29tbW9ucy5qYWNvY28udmVyc2lvbiAwLjguNCAtPiAwLjguNS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgICBjb20uZ2l0aHViLnNpb203OS5qYXBpY21wOmphcGljbXAtbWF2ZW4tcGx1Z2luIDAuMTQuMSAtPiAwLjE0LjMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuIApvIElPLTY2NzogIEFkZCBmdW5jdGlvbmFsIGludGVyZmFjZXMgSU9GdW5jdGlvbiBhbmQgSU9TdXBwbGllciAjMTEwLiBUaGFua3MgdG8gQWRhbSBSZXR0ZXIsIEdhcnkgR3JlZ29yeS4gCm8gICAgICAgICAgICBTdXBwb3J0IHN1YiBzZXF1ZW5jZXMgaW4gQ2hhclNlcXVlbmNlUmVhZGVyICM5MS4gVGhhbmtzIHRvIFJvYiBTcG9vciwgR2FyeSBHcmVnb3J5LiAKbyAgICAgICAgICAgIFJlbW92ZSBkZXByZWNhdGVkIHN1ZG8gc2V0dGluZy4gIzExMy4gVGhhbmtzIHRvIGRlbmdsaW1pbmcuIAoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuNjoKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IFllcy4KU2VtYW50aWMgY29tcGF0aWJsZTogWWVzLgoKQ29tbW9ucyBJTyAyLjcgcmVxdWlyZXMgSmF2YSA4LgpDb21tb25zIElPIDIuNiByZXF1aXJlcyBKYXZhIDcuCkNvbW1vbnMgSU8gMi41IHJlcXVpcmVzIEphdmEgNi4KQ29tbW9ucyBJTyAyLjQgcmVxdWlyZXMgSmF2YSA2LgpDb21tb25zIElPIDIuMyByZXF1aXJlcyBKYXZhIDYuCkNvbW1vbnMgSU8gMi4yIHJlcXVpcmVzIEphdmEgNS4KQ29tbW9ucyBJTyAxLjQgcmVxdWlyZXMgSmF2YSAxLjMuCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtaW8vY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIElPLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgSU8gd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWlvLwoKRG93bmxvYWQgcGFnZTogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtaW8vZG93bmxvYWRfaW8uY2dpCgpIYXZlIGZ1biEKLUFwYWNoZSBDb21tb25zIFRlYW0KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDIuNgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCklOVFJPRFVDVElPTjoKCkFwYWNoZSBDb21tb25zIElPIGlzIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBsaWtlIGphdmEuaW8uCkNsYXNzZXMgaW4gdGhpcyBwYWNrYWdlIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvIHN0YW5kYXJkIGFuZCBvZiBzdWNoIGhpZ2gKcmV1c2UgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5pby4KClRoZSBBcGFjaGUgQ29tbW9ucyBJTyBsaWJyYXJ5IGNvbnRhaW5zIHV0aWxpdHkgY2xhc3Nlcywgc3RyZWFtIGltcGxlbWVudGF0aW9ucywKZmlsZSBmaWx0ZXJzLCBmaWxlIGNvbXBhcmF0b3JzLCBlbmRpYW4gdHJhbnNmb3JtYXRpb24gY2xhc3NlcywgYW5kIG11Y2ggbW9yZS4KCkFwYWNoZSBDb21tb25zIElPIDIuNiByZXF1aXJlcyBhdCBsZWFzdCBKYXZhIDcgdG8gYnVpbGQgYW5kIHJ1bi4KCgpERVBSRUNBVElPTlMKPT09PT09PT09PT09CgpBbGwgY2xvc2VRdWlldGx5IG92ZXJsb2FkcyBpbiBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSU9VdGlscyBoYXZlIGJlZW4KZGVwcmVjYXRlZC4gVXNlIHRoZSB0cnktd2l0aC1yZXNvdXJjZXMgc3RhdGVtZW50IG9yIGhhbmRsZSBzdXBwcmVzc2VkCmV4Y2VwdGlvbnMgbWFudWFsbHkuCgpUaGUgY2xhc3Mgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVTeXN0ZW1VdGlscyBoYXMgYmVlbiBkZXByZWNhdGVkLgpVc2UgZXF1aXZhbGVudCBtZXRob2RzIGluIGphdmEubmlvLmZpbGUuRmlsZVN0b3JlIGluc3RlYWQsIGUuZy4KRmlsZXMuZ2V0RmlsZVN0b3JlKFBhdGhzLmdldCgiL2hvbWUiKSkuZ2V0VXNhYmxlU3BhY2UoKSBvciBpdGVyYXRlIG92ZXIKRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpLmdldEZpbGVTdG9yZXMoKS4KCgpDT01QQVRJQklMSVRZIFdJVEggSkFWQSA5Cj09PT09PT09PT09PT09PT09PQoKVGhlIE1BTklGRVNULk1GIG5vdyBjb250YWlucyBhbiBhZGRpdGlvbmFsIGVudHJ5OgoKICBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5hcGFjaGUuY29tbW9ucy5pbwoKVGhpcyBzaG91bGQgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgQ29tbW9ucyBJTyAyLjYgYXMgYSBtb2R1bGUgaW4gdGhlIEphdmEgOQptb2R1bGUgc3lzdGVtLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgaXNzdWU6CgogICAgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy01NTEKCkJ1aWxkaW5nIENvbW1vbnMgSU8gMi42IHNob3VsZCB3b3JrIG91dCBvZiB0aGUgYm94IHdpdGggdGhlIGxhdGVzdCBKYXZhIDkKcmVsZWFzZS4gUGxlYXNlIHJlcG9ydCBhbnkgSmF2YSA5IHJlbGF0ZWQgaXNzdWVzIGF0OgoKICAgIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8KCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09CgpvIElPLTU1MTogQWRkIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZSBNQU5JRkVTVCBlbnRyeSBmb3IgSmF2YSA5IGNvbXBhdGliaWxpdHkuCm8gSU8tMzY3OiBBZGQgY29udmVuaWVuY2UgbWV0aG9kcyBmb3IgY29weVRvRGlyZWN0b3J5LiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gSU8tNDkzOiBBZGQgaW5maW5pdGUgY2lyY3VsYXIgaW5wdXQgc3RyZWFtLiBUaGFua3MgdG8gUGlvdHIgVHVyc2tpLgpvIElPLTUwNzogQWRkIGEgQnl0ZU9yZGVyVXRpbHMgY2xhc3MuCm8gSU8tNTE4OiBBZGQgT2JzZXJ2YWJsZUlucHV0U3RyZWFtLgpvIElPLTUxOTogQWRkIE1lc3NhZ2VEaWdlc3RDYWxjdWxhdGluZ0lucHV0U3RyZWFtLgpvIElPLTUxMzogQWRkIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIHJlYWRpbmcgY2xhc3MgcGF0aCByZXNvdXJjZXMuCiAgICAgICAgICBUaGFua3MgdG8gQmVocmFuZyBTYWVlZHphZGVoLgoKRklYRUQgQlVHUwo9PT09PT09PT09CgpvIElPLTU0NjogQ2xvc2VkT3V0cHV0U3RyZWFtI2ZsdXNoIHNob3VsZCB0aHJvdy4gVGhhbmtzIHRvIFRvbWFzIENlbGF5YS4KbyBJTy01NTA6IERvY3VtZW50YXRpb24gaXNzdWUsIGZpeCA0MDQgSmF2YWRvYyBpc3N1ZXMgaW4gdGhlIGRlc2NyaXB0aW9uIHBhZ2UuCiAgICAgICAgICBUaGFua3MgdG8gSmltaSBBZHJpYW4uCm8gSU8tNDQyOiBKYXZhZG9jIGNvbnRyYWRpY3RvcnkgZm9yIEZpbGVGaWx0ZXJVdGlscy5hZ2VGaWxlRmlsdGVyKGN1dG9mZikgYW5kCiAgICAgICAgICB0aGUgZmlsdGVyIGl0IGNvbnN0cnVjdHM6IEFnZUZpbGVGaWx0ZXIoY3V0b2ZmKS4KICAgICAgICAgIFRoYW5rcyB0byBTaW1vbiBSb2JpbnNvbi4KbyBJTy01MzQ6IEZpbGVVdGlsVGVzdENhc2UudGVzdEZvcmNlRGVsZXRlRGlyKCkgc2hvdWxkIG5vdCBkZWxldGUgdGVzdERpcmVjdG9yeQogICAgICAgICAgcGFyZW50LgpvIElPLTUyODogRml4IFRhaWxlci5ydW4gcmFjZSBjb25kaXRpb24gcnVuYXdheSBsb2dnaW5nLiBUaGFua3MgdG8gRGF2ZSBNb3Rlbi4KbyBJTy00ODM6IGdldFByZWZpeExlbmd0aCByZXR1cm4gLTEgaWYgdW5peCBmaWxlIGNvbnRhaW5zIGNvbG9uLgogICAgICAgICAgVGhhbmtzIHRvIE1hcmtvIFZhc2ljLgpvIElPLTUyMDogRmlsZVV0aWxzVGVzdENhc2UjdGVzdENvbnRlbnRFcXVhbHNJZ25vcmVFT0wgZmFpbHMgb24gV2luZG93cy4KbyBJTy01MTY6IC5naXRhdHRyaWJ1dGVzIG5vdCBjb3JyZWN0bHkgYXBwbGllZC4gVGhhbmtzIHRvIEphc29uIFB5ZXJvbi4KbyBJTy01MTU6IEFsbG93IFNwZWNpZnlpbmcgSW5pdGlhbCBCdWZmZXIgU2l6ZSBvZiBEZWZlcnJlZEZpbGVPdXRwdXRTdHJlYW0uCiAgICAgICAgICBUaGFua3MgdG8gQnJldHQgTG91bnNidXJ5LCBHYXJ5IEdyZWdvcnkuCm8gSU8tNTEyOiBUaHJlc2hvbGRpbmdPdXRwdXRTdHJlYW0udGhyZXNob2xkUmVhY2hlZCgpIHJlc3VsdHMgaW4KICAgICAgICAgIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbi4gVGhhbmtzIHRvIFJhbGYgSGF1c2VyLgpvIElPLTUxMTogQWZ0ZXIgYSBmZXcgdW5pdCB0ZXN0cywgYSBmZXcgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcmllcyBub3QgY2xlYW5lZAogICAgICAgICAgY29tcGxldGVseS4gVGhhbmtzIHRvIEFobWV0IENlbGlrLgpvIElPLTUwMjogRXhjZXB0aW9ucyBhcmUgc3VwcHJlc3NlZCBpbmNvcnJlY3RseSB3aGVuIGNvcHlpbmcgZmlsZXMuCiAgICAgICAgICBUaGFua3MgdG8gQ2hyaXN0aWFuIFNjaHVsdGUuCm8gSU8tNTAzOiBVcGRhdGUgcGxhdGZvcm0gcmVxdWlyZW1lbnQgdG8gSmF2YSA3LgpvIElPLTUzNzogQk9NSW5wdXRTdHJlYW0gc2hvdWxkbid0IHNvcnQgYXJyYXkgb2YgQk9NcyBpbi1wbGFjZS4KICAgICAgICAgIFRoYW5rcyB0byBCb3J5cyBaaWJyb3YuCgpDSEFOR0VTCj09PT09PT0KCm8gSU8tNTUzOiBNYWtlIGNvZGUgc3R5bGUgb2YgaGFzQk9NKCkgY29uc2lzdGVudCB3aXRoIGdldEJPTUNoYXJzZXROYW1lKCkuCiAgICAgICAgICBUaGFua3MgdG8gTWljaGFlbCBFcm5zdC4KbyBJTy01NDI6IEZpbGVVdGlscyNyZWFkRmlsZVRvQnl0ZUFycmF5OiBvcHRpbWl6ZSByZWFkaW5nIG9mIGZpbGVzIHdpdGgga25vd24KICAgICAgICAgIHNpemUuIFRoYW5rcyB0byBJbG1hcnMgUG9pa2Fucy4KbyBJTy01NDc6IFRocm93IGEgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGluc3RlYWQgb2YgTnVsbFBvaW50ZXJFeGNlcHRpb24gaW4KICAgICAgICAgIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2VXaW5kb3dzKCkuIFRoYW5rcyB0byBOaWtoaWwgU2hpbmRlLAogICAgICAgICAgTWljaGFlbCBFcm5zdCwgR2FyeSBHcmVvcnkuCm8gSU8tNTA2OiBEZXByZWNhdGUgbWV0aG9kcyBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlS2IoKS4KICAgICAgICAgIFRoYW5rcyB0byBDaHJpc3RpYW4gU2NodWx0ZS4KbyBJTy01MDU6IE1ha2UgTGluZUl0ZXJhdG9yIGltcGxlbWVudCBDbG9zZWFibGUgdG8gc3VwcG9ydCB0cnktd2l0aC1yZXNvdXJjZXMKICAgICAgICAgIHN0YXRlbWVudHMuIFRoYW5rcyB0byBDaHJpc3RpYW4gU2NodWx0ZS4KbyBJTy01MDQ6IERlcHJlY2F0ZWQgb2YgYWxsIElPVXRpbHMuY2xvc2VRdWlldGx5KCkgbWV0aG9kcyBhbmQgdXNlCiAgICAgICAgICB0cnktd2l0aC1yZXNvdXJjZXMgaW50ZXJuYWxseS4gVGhhbmtzIHRvIENocmlzdGlhbiBTY2h1bHRlLgoKUkVNT1ZFRAo9PT09PT09CgpvIElPLTUxNDogUmVtb3ZlIG9yZy5hcGFjaGUuY29tbW9ucy5pby5KYXZhN1N1cHBvcnQuCgpDT01QQVRJQklMSVRZIFdJVEggT0xERVIgVkVSU0lPTlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMi41OgpCaW5hcnkgY29tcGF0aWJsZTogWWVzLgpTb3VyY2UgY29tcGF0aWJsZTogWWVzLgpTZW1hbnRpYyBjb21wYXRpYmxlOiBZZXMuCgpDb21wYXRpYmlsaXR5IHdpdGggMi42IGFuZCAxLjQ6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBObywgc2VlIHRoZSByYXJlIGNhc2UgaW4KICBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KU2VtYW50aWMgY29tcGF0aWJsZTogTm8sIHNlZSB0aGUgcmFyZSBjYXNlIGluCiAgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy0zMTguCgpDb21tb25zIElPIDIuNiByZXF1aXJlcyBKYXZhIDcgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMi41IHJlcXVpcmVzIEphdmEgNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjQgcmVxdWlyZXMgSmF2YSA2IG9yIGxhdGVyLgpDb21tb25zIElPIDIuMyByZXF1aXJlcyBKYXZhIDYgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMi4yIHJlcXVpcmVzIEphdmEgNSBvciBsYXRlci4KQ29tbW9ucyBJTyAxLjQgcmVxdWlyZXMgSmF2YSAxLjMgb3IgbGF0ZXIuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ck5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBJTy00ODc6ICBBZGQgVmFsaWRhdGluZ09iamVjdElucHV0U3RyZWFtIGZvciBjb250cm9sbGVkIGRlc2VyaWFsaXphdGlvbiAKbyBJTy00NzE6ICBTdXBwb3J0IGZvciBhZGRpdGlvbmFsIGVuY29kaW5ncyBpbiBSZXZlcnNlZExpbmVzRmlsZVJlYWRlciBUaGFua3MgdG8gTGVhbmRybyBSZWlzLiAKbyBJTy00MjU6ICBTZXR0ZXIgbWV0aG9kIGZvciB0aHJlc2hvbGQgb24gVGhyZXNob2xkaW5nT3V0cHV0U3RyZWFtIFRoYW5rcyB0byBDcmFpZyBTd2Fuay4gCm8gSU8tNDA2OiAgSW50cm9kdWNlIG5ldyBjbGFzcyBBcHBlbmRhYmxlT3V0cHV0U3RyZWFtIFRoYW5rcyB0byBOaWFsbCBQZW1iZXJ0b24uIApvIElPLTQ1OTogIEFkZCBXaW5kb3dzTGluZUVuZGluZ0lucHV0U3RyZWFtIGFuZCBVbml4TGluZUVuZGluZ0lucHV0U3RyZWFtLiBUaGFua3MgdG8gS3Jpc3RpYW4gUm9zZW52b2xkLiAKbyBJTy00NTc6ICBBZGQgYSBCb3VuZGVkUmVhZGVyLCBhIHdyYXBwZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJhaW4gYWNjZXNzCiAgICAgICAgdG8gYW4gdW5kZXJseWluZyBzdHJlYW0gd2hlbiB1c2VkIHdpdGggbWFyay9yZXNldCAtCiAgICAgICAgdG8gYXZvaWQgb3ZlcmZsb3dpbmcgdGhlIG1hcmsgbGltaXQgb2YgdGhlIHVuZGVybHlpbmcgYnVmZmVyLiBUaGFua3MgdG8gS3Jpc3RpYW4gUm9zZW52b2xkLiAKbyBJTy00MjY6ICBBZGQgQVBJIElPVXRpbHMuY2xvc2VRdWlldGx5KENsb3NlYWJsZS4uLikgCm8gSU8tNDEwOiAgUmVhZGZ1bGx5KCkgVGhhdCBSZXR1cm5zIEEgQnl0ZSBBcnJheSBUaGFua3MgdG8gQmVsdWdhIEJlaHIuIApvIElPLTM5NTogIE92ZXJsb2FkIElPVXRpbHMgYnVmZmVyIG1ldGhvZHMgdG8gYWNjZXB0IGJ1ZmZlciBzaXplIFRoYW5rcyB0byBCZWx1Z2EgQmVoci4gCm8gSU8tMzgyOiAgQ2h1bmtlZCBJTyBmb3IgbGFyZ2UgYXJyYXlzLgogICAgICAgICBBZGRlZCB3cml0ZUNodW5rZWQoYnl0ZVtdLCBPdXRwdXRTdHJlYW0pIGFuZCB3cml0ZUNodW5rZWQoY2hhcltdIFdyaXRlcikKICAgICAgICAgQWRkZWQgQ2h1bmtlZE91dHB1dFN0cmVhbSwgQ2h1bmtlZFdyaXRlciAKbyBJTy0yMzM6ICBBZGQgTWV0aG9kcyBmb3IgQnVmZmVyaW5nIFN0cmVhbXMvV3JpdGVycyBUbyBJT1V0aWxzCiAgICAgICAgIEFkZGVkIG92ZXJsb2FkZWQgYnVmZmVyKCkgbWV0aG9kcyAtIHNlZSBhbHNvIElPLTMzMCAKbyBJTy0zMzA6ICBJT1V0aWxzI3RvQnVmZmVyZWRPdXRwdXRTdHJlYW0vdG9CdWZmZXJlZFdyaXRlciB0byBjb25kaXRpb25hbGx5IHdyYXAgdGhlIG91dHB1dAogICAgICAgICBBZGRlZCBvdmVybG9hZGVkIGJ1ZmZlcigpIG1ldGhvZHMgLSBzZWUgYWxzbyBJTy0yMzMgCm8gSU8tMzgxOiAgQWRkIEZpbGVVdGlscy5jb3B5SW5wdXRTdHJlYW1Ub0ZpbGUgQVBJIHdpdGggb3B0aW9uIHRvIGxlYXZlIHRoZSBzb3VyY2Ugb3Blbi4KICAgICAgICBTZWUgY29weUlucHV0U3RyZWFtVG9GaWxlKGZpbmFsIElucHV0U3RyZWFtIHNvdXJjZSwgZmluYWwgRmlsZSBkZXN0aW5hdGlvbiwgYm9vbGVhbiBjbG9zZVNvdXJjZSkgCm8gSU8tMzc5OiAgQ2hhclNlcXVlbmNlSW5wdXRTdHJlYW0gLSBhZGQgdGVzdHMgZm9yIGF2YWlsYWJsZSgpCiAgICAgICAgIEZpeCBjb2RlIHNvIGl0IHJlYWxseSBkb2VzIHJlZmxlY3QgYSBtaW5pbXVtIGF2YWlsYWJsZS4gCm8gSU8tMzQ2OiAgQWRkIEJ5dGVBcnJheU91dHB1dFN0cmVhbS50b0lucHV0U3RyZWFtKCkgCm8gSU8tMzQxOiAgQSBjb25zdGFudCBmb3IgaG9sZGluZyB0aGUgQk9NIGNoYXJhY3RlciAoVStGRUZGKSAKbyBJTy0zNjE6ICBBZGQgQVBJIEZpbGVVdGlscy5mb3JjZU1rZGlyc1BhcmVudCgpLiAKbyBJTy0zNjA6ICBBZGQgQVBJIENoYXJzZXRzLnJlcXVpcmVkQ2hhcnNldHMoKS4gCm8gSU8tMzU5OiAgQWRkIElPVXRpbHMuc2tpcCBhbmQgc2tpcEZ1bGx5KFJlYWRhYmxlQnl0ZUNoYW5uZWwsIGxvbmcpLiBUaGFua3MgdG8geXVrb2JhLiAKbyBJTy0zNTg6ICBBZGQgSU9VdGlscy5yZWFkIGFuZCByZWFkRnVsbHkoUmVhZGFibGVCeXRlQ2hhbm5lbCwgQnl0ZUJ1ZmZlciBidWZmZXIpLiBUaGFua3MgdG8geXVrb2JhLiAKbyBJTy0zNTM6ICBBZGQgQVBJIElPVXRpbHMuY29weShJbnB1dFN0cmVhbSwgT3V0cHV0U3RyZWFtLCBpbnQpIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gSU8tMzQ5OiAgQWRkIEFQSSB3aXRoIGFycmF5IG9mZnNldCBhbmQgbGVuZ3RoIGFyZ3VtZW50IHRvIEZpbGVVdGlscy53cml0ZUJ5dGVBcnJheVRvRmlsZS4gVGhhbmtzIHRvIHNjb3AuIApvIElPLTM0ODogIE1pc3NpbmcgaW5mb3JtYXRpb24gaW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93biBieSBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzI3ZhbGlkYXRlTGlzdEZpbGVzUGFyYW1ldGVycy4gVGhhbmtzIHRvIHBsY3N0cGllcnJlLiAKbyBJTy0zNDU6ICBTdXBwbHkgYSBob29rIG1ldGhvZCBhbGxvd2luZyBUYWlsZXIgYWN0aXZlbHkgZGV0ZXJtaW5pbmcgc3RvcCBjb25kaXRpb24uIFRoYW5rcyB0byBta3Jlc3NlLiAKbyBJTy00Mzc6ICBNYWtlIElPVXRpbHMuRU9GIHB1YmxpYyBhbmQgcmV1c2UgaXQgaW4gdmFyaW91cyBjbGFzc2VzLiAKCkZpeGVkIEJ1Z3M6Cm8gSU8tNDQ2OiAgYWRkcyBhbiBlbmRPZkZpbGVSZWFjaGVkIG1ldGhvZCB0byB0aGUgVGFpbGVyTGlzdGVuZXIgVGhhbmtzIHRvIEplZmZyZXkgQmFycnVzLiAKbyBJTy00ODQ6ICBGaWxlbmFtZVV0aWxzIHNob3VsZCBoYW5kbGUgZW1iZWRkZWQgbnVsbCBieXRlcyBUaGFua3MgdG8gUGhpbGlwcGUgQXJ0ZWF1LiAKbyBJTy00ODE6ICBDaGFuZ2VkL0NvcnJlY3RlZCBhbGdvcml0aG0gZm9yIHdhaXRGb3IgCm8gSU8tNDI4OiAgQk9NSW5wdXRTdHJlYW0uc2tpcCByZXR1cm5zIHdyb25nIGNvdW50IGlmIHN0cmVhbSBjb250YWlucyBubyBCT00gVGhhbmtzIHRvIFN0ZWZhbiBHbWVpbmVyLiAKbyBJTy00ODg6ICBGaWxlVXRpbHMud2FpdEZvciguLi4pIHN3YWxsb3dzIHRocmVhZCBpbnRlcnJ1cHRlZCBzdGF0dXMgVGhhbmtzIHRvIEJq9nJuIEJ1Y2huZXIuIApvIElPLTQ1MjogIFN1cHBvcnQgZm9yIHN5bWxpbmtzIHdpdGggbWlzc2luZyB0YXJnZXQuIEFkZGVkIHN1cHBvcnQgZm9yIEpESzcgc3ltbGluayBmZWF0dXJlcyB3aGVuIHByZXNlbnQgVGhhbmtzIHRvIERhdmlkIFN0YW5kaXNoLiAKbyBJTy00NTM6ICBSZWdyZXNzaW9uIGluIEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nIGZyb20gMi4wLjEgVGhhbmtzIHRvIFN0ZXZlbiBDaHJpc3RvdS4gCm8gSU8tNDUxOiAgYW50IHRlc3QgZmFpbHMgLSByZXNvdXJjZXMgbWlzc2luZyBmcm9tIHRlc3QgY2xhc3NwYXRoIFRoYW5rcyB0byBEYXZpZCBTdGFuZGlzaC4gCm8gSU8tNDM1OiAgRG9jdW1lbnQgdGhhdCBGaWxlVXRpbHMuZGVsZXRlRGlyZWN0b3J5LCBkaXJlY3RvcnlDb250YWlucyBhbmQgY2xlYW5EaXJlY3RvcnkKICAgICAgICAgbWF5IHRocm93IGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpbiBjYXNlIHRoZSBwYXNzZWQgZGlyZWN0b3J5IGRvZXMgbm90CiAgICAgICAgIGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeS4gVGhhbmtzIHRvIERvbWluaWsgU3RhZGxlci4gCm8gSU8tNDI0OiAgSmF2YWRvYyBmaXhlcywgbW9zdGx5IHRvIGFwcGVhc2UgMS44LjAgVGhhbmtzIHRvIFZpbGxlIFNreXR05C4gCm8gSU8tMzg5OiAgRmlsZVV0aWxzLnNpemVPZkRpcmVjdG9yeSBjYW4gdGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIFRoYW5rcyB0byBBdXN0aW4gRG91cG5pay4gCm8gSU8tMzkwOiAgRmlsZVV0aWxzLnNpemVPZkRpcmVjdG9yeUFzQmlnSW50ZWdlciBjYW4gb3ZlcmZsb3cuCiAgICAgICAgIEVuc3VyZSB0aGF0IHJlY3Vyc2l2ZSBjYWxscyBhbGwgdXNlIEJpZ0ludGVnZXIgCm8gSU8tMzg1OiAgRmlsZVV0aWxzLmRvQ29weUZpbGUgY2FuIHBvdGVudGlhbGx5IGxvb3AgZm9yIGV2ZXIKICAgICAgICAgRXhpdCBsb29wIGlmIG5vIGRhdGEgdG8gY29weSAKbyBJTy0zODM6ICBGaWxlVXRpbHMuZG9Db3B5RmlsZSBjYWNoZXMgdGhlIGZpbGUgc2l6ZTsgbmVlZHMgdG8gYmUgZG9jdW1lbnRlZAogICAgICAgICBBZGRlZCBKYXZhZG9jOyBzaG93IGZpbGUgbGVuZ3RocyBpbiBleGNlcHRpb24gbWVzc2FnZSAKbyBJTy0zODA6ICBGaWxlVXRpbHMuY29weUlucHV0U3RyZWFtVG9GaWxlIHNob3VsZCBkb2N1bWVudCBpdCBjbG9zZXMgdGhlIGlucHV0IHNvdXJjZSBUaGFua3MgdG8gY2xhdWRpb19jaC4gCm8gSU8tMjc5OiAgVGFpbGVyIGVycm9uZW91c2x5IGNvbnNpZGVycyBmaWxlIGFzIG5ldy4KICAgICAgICBGaXggdG8gdXNlIGZpbGUubGFzdE1vZGlmaWVkKCkgcmF0aGVyIHRoYW4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgCm8gSU8tMzU2OiAgQ2hhclNlcXVlbmNlSW5wdXRTdHJlYW0jcmVzZXQoKSBiZWhhdmVzIGluY29ycmVjdGx5IGluIGNhc2Ugd2hlbiBidWZmZXIgc2l6ZSBpcyBub3QgZGl2aWRhYmxlIGJ5IGRhdGEgc2l6ZS4KICAgICAgICAgRml4IGNvZGUgc28gc2tpcCByZWxhdGVzIHRvIHRoZSBlbmNvZGVkIGJ5dGVzOyByZXNldCBub3cgcmUtZW5jb2RlcyB0aGUgZGF0YSB1cCB0byB0aGUgcG9pbnQgb2YgdGhlIG1hcmsgCm8gSU8tMzY4OiAgQ2xhc3NMb2FkZXJPYmplY3RJbnB1dFN0cmVhbSBkb2VzIG5vdCBoYW5kbGUgcHJpbWl0aXZlIHR5cGVkIG1lbWJlcnMgCm8gSU8tMzE0OiAgRGVwcmVjYXRlIGFsbCBtZXRob2RzIHRoYXQgdXNlIHRoZSBkZWZhdWx0IGVuY29kaW5nIApvIElPLTMzODogIFdoZW4gYSBmaWxlIGlzIHJvdGF0ZWQsIGZpbmlzaCByZWFkaW5nIHByZXZpb3VzIGZpbGUgcHJpb3IgdG8gc3RhcnRpbmcgbmV3IG9uZSAKbyBJTy0zNTQ6ICBDb21tb25zIElPIFRhaWxlciBkb2VzIG5vdCByZXNwZWN0IFVURi04IENoYXJzZXQuIApvIElPLTMyMzogIFdoYXQgc2hvdWxkIGhhcHBlbiBpbiBGaWxlVXRpbHMuc2l6ZU9mW0RpcmVjdG9yeV0gd2hlbiBhbiBvdmVyZmxvdyB0YWtlcyBwbGFjZT8KICAgICAgICBBZGRlZCBKYXZhZG9jLiAKbyBJTy0zNzI6ICBGaWxlVXRpbHMubW92ZURpcmVjdG9yeSBjYW4gcHJvZHVjZSBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2Ugb24gZmFpbGl1cmUgCm8gSU8tMzYyOiAgSU9VdGlscy5jb250ZW50RXF1YWxzKiBtZXRob2RzIHJldHVybnMgZmFsc2UgaWYgaW5wdXQxID09IGlucHV0Miwgc2hvdWxkIHJldHVybiB0cnVlLiBUaGFua3MgdG8gbW1hZHNvbiwgZ2dyZWdvcnkuIApvIElPLTM1NzogIFtUYWlsZXJdIEludGVycnVwdGVkRXhjZXB0aW9uIHdoaWxlIHRoZSB0aHJlYWQgaXMgc2xlZXBpbmcgaXMgc2lsZW50bHkgaWdub3JlZCBUaGFua3MgdG8gbW9ydGVuaC4gCm8gSU8tMzUyOiAgU3BlbGxpbmcgZml4ZXMuIFRoYW5rcyB0byBzY29wLiAKbyBJTy00MzY6ICBJbXByb3BlciBKYXZhZG9jIGNvbW1lbnQgZm9yIEZpbGVuYW1lVXRpbHMuaW5kZXhPZkV4dGVuc2lvbi4gVGhhbmtzIHRvIGNocmlzdG9waC5zY2huZWVnYW5zLiAKCkNoYW5nZXM6Cm8gSU8tNDMzOiAgQ29udmVydGVkIGFsbCB0ZXN0Y2FzZXMgdG8gSlVuaXQgNCAKbyBJTy00NjY6ICBBZGRlZCB0ZXN0Y2FzZSB0byBzaG93IHRoaXMgd2FzIGZpeGVkIHdpdGggSU8tNDIzIApvIElPLTQ3OTogIENvcnJlY3QgZXhjZXB0aW9uIG1lc3NhZ2UgaW4gRmlsZVV0aWxzLmdldEZpbGUoRmlsZSwgU3RyaW5nLi4uKSBUaGFua3MgdG8gWmhvdWNlIENoZW4uIApvIElPLTQ2NTogIFVwZGF0ZSB0byBKVW5pdCA0LjEyIFRoYW5rcyB0byBiYXNlZDIuIApvIElPLTQ2MjogIElPRXhjZXB0aW9uV2l0aENhdXNlIG5vIGxvbmdlciBuZWVkZWQgCm8gSU8tNDIyOiAgRGVwcmVjYXRlIENoYXJzZXRzIENoYXJzZXQgY29uc3RhbnRzIGluIGZhdm9yIG9mIEphdmEgNydzIGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cyAKbyBJTy0yMzk6ICBDb252ZXJ0IElPQ2FzZSB0byBhIEphdmEgMS41KyBFbnVtZXJhdGlvbgogICAgICAgICBbTi5CLiB0aGlzIGlzIGJpbmFyeSBjb21wYXRpYmxlXSAKbyBJTy0zMjg6ICBnZXRQcmVmaXhMZW5ndGggcmV0dXJucyBudWxsIGlmIGZpbGVuYW1lIGhhcyBsZWFkaW5nIHNsYXNoZXMKICAgICAgICBKYXZhZG9jOiBhZGQgZXhhbXBsZXMgdG8gc2hvdyBjb3JyZWN0IGJlaGF2aW9yOyBhZGQgdW5pdCB0ZXN0cyAKbyBJTy0yOTk6ICBGaWxlVXRpbHMubGlzdEZpbGVzQW5kRGlycyBpbmNsdWRlcyBvcmlnaW5hbCBkaXIgaW4gcmVzdWx0cyBldmVuIHdoZW4gaXQgZG9lc24ndCBtYXRjaCBmaWx0ZXIKICAgICAgICBKYXZhZG9jOiBjbGFyaWZ5IHRoYXQgb3JpZ2luYWwgZGlyIGlzIGluY2x1ZGVkIGluIHRoZSByZXN1bHRzIApvIElPLTM3NTogIEZpbGVuYW1lVXRpbHMuc3BsaXRPblRva2VucyhTdHJpbmcgdGV4dCkgY2hlY2sgZm9yICcqKicgY291bGQgYmUgc2ltcGxpZmllZCAKbyBJTy0zNzQ6ICBXaWxkY2FyZEZpbGVGaWx0ZXIgY3RvcnMgc2hvdWxkIG5vdCB1c2UgbnVsbCB0byBtZWFuIElPQ2FzZS5TRU5TSVRJVkUgd2hlbiBkZWxlZ2F0aW5nIHRvIG90aGVyIGN0b3JzIAoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuNDoKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IFllcy4KU2VtYW50aWMgY29tcGF0aWJsZTogWWVzLgoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuMiBhbmQgMS40OgpCaW5hcnkgY29tcGF0aWJsZTogWWVzLgpTb3VyY2UgY29tcGF0aWJsZTogTm8sIHNlZSB0aGUgcmFyZSBjYXNlIGluIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8tMzE4LgpTZW1hbnRpYyBjb21wYXRpYmxlOiBObywgc2VlIHRoZSByYXJlIGNhc2UgaW4gaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy0zMTguCgpDb21tb25zIElPIDIuNSByZXF1aXJlcyBKYXZhIDYgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMi40IHJlcXVpcmVzIEphdmEgNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSmF2YSA2IG9yIGxhdGVyLgpDb21tb25zIElPIDIuMiByZXF1aXJlcyBKYXZhIDUgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIEphdmEgMS4zIG9yIGxhdGVyLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMi40Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBJTy0yNjk6ICBUYWlsZXIgbG9ja3MgZmlsZSBmcm9tIGRlbGV0aW9uL3JlbmFtZSBvbiBXaW5kb3dzLiBUaGFua3MgdG8Kc2ViYi4KbyBJTy0zMzM6ICBFeHBvcnQgT1NHaSBwYWNrYWdlcyBhdCB2ZXJzaW9uIDEueCBpbiBhZGRpdGlvbiB0byAyLnguIFRoYW5rcwp0byBmbWVzY2hiZS4KbyBJTy0zMjA6ICBBZGQgWG1sU3RyZWFtUmVhZGVyIHN1cHBvcnQgZm9yIFVURi0zMi4gVGhhbmtzIHRvIGdncmVnb3J5LgpvIElPLTMzMTogIEJPTUlucHV0U3RyZWFtIHdyb25nbHkgZGV0ZWN0cyBVVEYtMzJMRV9CT00gZmlsZXMgYXMKVVRGLTE2TEVfQk9NIGZpbGVzIGluIG1ldGhvZCBnZXRCT00oKS4gVGhhbmtzIHRvIGdncmVnb3J5LgpvIElPLTMyNzogIEFkZCBieXRlQ291bnRUb0Rpc3BsYXlTaXplKEJpZ0ludGVnZXIpLiBUaGFua3MgdG8gZ2dyZWdvcnkuCm8gSU8tMzI2OiAgQWRkIG5ldyBGaWxlVXRpbHMuc2l6ZU9mW0RpcmVjdG9yeV0gQVBJcyB0byByZXR1cm4gQmlnSW50ZWdlci4KVGhhbmtzIHRvIGdncmVnb3J5LgpvIElPLTMyNTogIEFkZCBJT1V0aWxzLnRvQnl0ZUFycmF5IG1ldGhvZHMgdG8gd29yayB3aXRoIFVSTCBhbmQgVVJJLiBUaGFua3MKdG8gcmF2aXByYWsuCm8gSU8tMzI0OiAgQWRkIG1pc3NpbmcgQ2hhcnNldCBzaXN0ZXIgQVBJcyB0byBtZXRob2QgdGhhdCB0YWtlIGEgU3RyaW5nCmNoYXJzZXQgbmFtZS4gVGhhbmtzIHRvIHJhdmlwcmFrLgoKRml4ZWQgQnVnczoKbyBJTy0zMzY6ICBZb3R0YWJ5dGUgKFlCKSBpbmNvcnJlY3RseSBkZWZpbmVkIGluIEZpbGVVdGlscy4gVGhhbmtzIHRvCnJsZWF2ZWxsZS4KbyBJTy0yNzk6ICBUYWlsZXIgZXJyb25lb3VzbHkgY29uc2lkZXJzIGZpbGUgYXMgbmV3LiBUaGFua3MgdG8gU2VyZ2lvCkJvc3NhLCBDaHJpcyBCYXJvbi4KbyBJTy0zMzU6ICBUYWlsZXIjcmVhZExpbmVzIC0gaW5jb3JyZWN0IENSIGhhbmRsaW5nLgpvIElPLTMzNDogIEZpbGVVdGlscy50b1VSTHMgdGhyb3dzIE5QRSBmb3IgbnVsbCBwYXJhbWV0ZXI7IGRvY3VtZW50IHRoZQpiZWhhdmlvci4KbyBJTy0zMzI6ICBJbXByb3ZlIHRhaWxlcidzIHJlYWRpbmcgcGVyZm9ybWFuY2UuIFRoYW5rcyB0byBsaWFuZ2x5LgpvIElPLTI3OTogIEltcHJvdmUgVGFpbGVyIHBlcmZvcm1hbmNlIHdpdGggYnVmZmVyZWQgcmVhZHMgKHNlZSBJTy0zMzIpLgpvIElPLTMyOTogIEZpbGVVdGlscy53cml0ZUxpbmVzIHVzZXMgdW5idWZmZXJlZCBJTy4gVGhhbmtzIHRvIHRpdnYuCm8gSU8tMzE5OiAgRmlsZVV0aWxzLnNpemVPZkRpcmVjdG9yeSBmb2xsb3dzIHN5bWJvbGljIGxpbmtzLiBUaGFua3MgdG8KcmF2aXByYWsuCgoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuMzoKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IFllcy4KU2VtYW50aWMgY29tcGF0aWJsZTogWWVzLgoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuMiBhbmQgMS40OgpCaW5hcnkgY29tcGF0aWJsZTogWWVzLgpTb3VyY2UgY29tcGF0aWJsZTogTm8sIHNlZSB0aGUgcmFyZSBjYXNlIGluIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8tMzE4LgpTZW1hbnRpYyBjb21wYXRpYmxlOiBObywgc2VlIHRoZSByYXJlIGNhc2UgaW4gaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy0zMTguCgpDb21tb25zIElPIDIuNCByZXF1aXJlcyBKYXZhIDYgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMi4zIHJlcXVpcmVzIEphdmEgNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjIgcmVxdWlyZXMgSmF2YSA1IG9yIGxhdGVyLgpDb21tb25zIElPIDEuNCByZXF1aXJlcyBKYXZhIDEuMyBvciBsYXRlci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDIuMwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gSU8tMzIyOiAgQWRkIGFuZCB1c2UgY2xhc3MgQ2hhcnNldHMuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gSU8tMzIxOiAgQnl0ZU9yZGVyTWFyayBVVEZfMzJMRSBpcyBpbmNvcnJlY3QuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gSU8tMzE4OiAgQWRkIENoYXJzZXQgc2lzdGVyIEFQSXMgdG8gbWV0aG9kIHRoYXQgdGFrZSBhIFN0cmluZyBjaGFyc2V0IG5hbWUuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCgpDb21wYXRpYmlsaXR5IHdpdGggMi4yIGFuZCAxLjQ6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBObywgc2VlIHRoZSByYXJlIGNhc2UgaW4gaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy0zMTguClNlbWFudGljIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KCkNvbW1vbnMgSU8gMi4zIHJlcXVpcmVzIEphdmEgNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjIgcmVxdWlyZXMgSmF2YSA1IG9yIGxhdGVyLgpDb21tb25zIElPIDEuNCByZXF1aXJlcyBKYXZhIDEuMyBvciBsYXRlci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDIuMgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gQWRkIElPVVRpbHMudG9CdWZmZXJlZFJlYWRlcihSZWFkZXIpICBJc3N1ZTogSU8tMzEzLiBUaGFua3MgdG8gZ2dyZWdvcnkuIApvIEFsbG93IGFwcGxpY2F0aW9ucyB0byBwcm92aWRlIGJ1ZmZlciAob3Igc2l6ZSkgZm9yIGNvcHlMYXJnZSBtZXRob2RzLiAgSXNzdWU6IElPLTMwOC4gVGhhbmtzIHRvIE1hbm9qIE1va2FzaGkuIApvIE5ldyBjb3B5TGFyZ2UoKSBtZXRob2QgaW4gSU9VdGlscyB0aGF0IHRha2VzIGFkZGl0aW9uYWwgb2Zmc2V0LCBsZW5ndGggYXJndW1lbnRzICBJc3N1ZTogSU8tMzA1LiBUaGFua3MgdG8gTWFub2ogTW9rYXNoaS4gCm8gVXNlIHRlcmFieXRlIChUQiksIHBldGFieXRlIChQQikgYW5kIGV4YWJ5dGUgKEVCKSBpbiBGaWxlVXRpbHMuYnl0ZUNvdW50VG9EaXNwbGF5U2l6ZShsb25nIHNpemUpICBJc3N1ZTogSU8tMjg3LiBUaGFua3MgdG8gUm9uIEt1cmlzLCBHYXJ5IEdyZWdvcnkuIApvIEZpbGVVdGlscy5saXN0RmlsZXMoKSBkb2Vzbid0IHJldHVybiBkaXJlY3RvcmllcyAgSXNzdWU6IElPLTE3My4gVGhhbmtzIHRvIE1hcmNvcyBWaW7tY2l1cyBkYSBTaWx2YS4gCm8gQ2hhclNlcXVlbmNlSW5wdXRTdHJlYW0gdG8gZWZmaWNpZW50bHkgc3RyZWFtIGNvbnRlbnQgb2YgYSBDaGFyU2VxdWVuY2UgIElzc3VlOiBJTy0yOTcuIFRoYW5rcyB0byBPbGVnIEthbG5pY2hldnNraS4gCm8gVGhlIHNlY29uZCBjb25zdHJ1Y3RvciBvZiBUYWlsZXIgY2xhc3MgZG9lcyBub3QgcGFzcyAnZGVsYXknIHRvIHRoZSB0aGlyZCBvbmUgIElzc3VlOiBJTy0zMDQuIFRoYW5rcyB0byBsaWFuZ2x5LiAKbyBUZWVPdXRwdXRTdHJlYW0gZG9lcyBub3QgY2FsbCBicmFuY2guY2xvc2UoKSB3aGVuIG1haW4uY2xvc2UoKSB0aHJvd3MgYW4gZXhjZXB0aW9uICBJc3N1ZTogSU8tMzAzLiBUaGFua3MgdG8gZmFiaWFuLmJhcm5leS4gCm8gQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluIEJPTUlucHV0U3RyZWFtIHdoZW4gcmVhZGluZyBhIGZpbGUgd2l0aG91dCBCT00gbXVsdGlwbGUgdGltZXMgIElzc3VlOiBJTy0zMDIuIFRoYW5rcyB0byBqc3RldWVyd2FsZCwgZGV0aW5oby4gCm8gQWRkIElPVXRpbHMuY2xvc2VRdWlldGx5KFNlbGVjdG9yKSBuZWNlc3NhcnkgIElzc3VlOiBJTy0zMDEuIFRoYW5rcyB0byBrYXlrYXkudW5pcXVlLiAKbyBJT1V0aWxzLmNsb3NlUXVpZXRseSgpIHNob3VsZCB0YWtlIGEgU2VydmVyU29ja2V0IGFzIGEgcGFyYW1ldGVyICBJc3N1ZTogSU8tMjkyLiBUaGFua3MgdG8gc2ViYi4gCm8gQWRkIHJlYWQvcmVhZEZ1bGx5IG1ldGhvZHMgdG8gSU9VdGlscyAgSXNzdWU6IElPLTI5MC4gVGhhbmtzIHRvIHNlYmIuIApvIFN1cHBseSBhIFJldmVyc2VkTGluZXNGaWxlUmVhZGVyICBJc3N1ZTogSU8tMjg4LiBUaGFua3MgdG8gR2VvcmcgSGVuemxlci4gCm8gQWRkIG5ldyBmdW5jdGlvbiBGaWxlVXRpbHMuZGlyZWN0b3J5Q29udGFpbnMuICBJc3N1ZTogSU8tMjkxLiBUaGFua3MgdG8gZ2dyZWdvcnkuIApvIEZpbGVVdGlscy5jb250ZW50RXF1YWxzIGFuZCBJT1V0aWxzLmNvbnRlbnRFcXVhbHMgLSBBZGQgb3B0aW9uIHRvIGlnbm9yZSAibGluZSBlbmRpbmdzIgogICAgICAgIEFkZGVkIGNvbnRlbnRFcXVhbHNJZ25vcmVFT0wgbWV0aG9kcyB0byBib3RoIGNsYXNzZXMgIElzc3VlOiBJTy0yNzUuIFRoYW5rcyB0byBDSiBBc3Byb21nb3MuIAoKRml4ZWQgQnVnczoKbyBJT1V0aWxzLnJlYWQoSW5wdXRTdHJlYW0vUmVhZGVyKSBpZ25vcmVzIHRoZSBvZmZzZXQgcGFyYW1ldGVyICBJc3N1ZTogSU8tMzExLiBUaGFua3MgdG8gUm9iZXJ0IE11aXIuIApvIENoYXJTZXF1ZW5jZUlucHV0U3RyZWFtKENoYXJTZXF1ZW5jZSBzLCBDaGFyc2V0IGNoYXJzZXQsIGludCBidWZmZXJTaXplKSBpZ25vcmVzIGJ1ZmZlclNpemUgIElzc3VlOiBJTy0zMTIuIApvIEZpbGVVdGlscy5tb3ZlRGlyZWN0b3J5VG9EaXJlY3RvcnkgcmVtb3ZlcyBzb3VyY2UgZGlyZWN0b3J5IGlmIGRlc3RpbmF0aW9uIGlzIGEgc3ViZGlyZWN0b3J5ICBJc3N1ZTogSU8tMzAwLiAKbyBSZWFkZXJJbnB1dFN0cmVhbSNyZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSBzaG91bGQgY2hlY2sgZm9yIHZhbGlkIHBhcmFtZXRlcnMgIElzc3VlOiBJTy0zMDcuIApvIFJlYWRlcklucHV0U3RyZWFtI3JlYWQoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHNob3VsZCBhbHdheXMgcmV0dXJuIDAgZm9yIGxlbmd0aCA9PSAwICBJc3N1ZTogSU8tMzA2LiAKbyAiRmlsZVV0aWxzI2RlbGV0ZURpcmVjdG9yeU9uRXhpdChGaWxlKSIgZG9lcyBub3Qgd29yayAgSXNzdWU6IElPLTI3Ni4gVGhhbmtzIHRvIG5rYW1pLiAKbyBCb3VuZGVkSW5wdXRTdHJlYW0ucmVhZCgpIHRyZWF0cyBtYXggZGlmZmVyZW50bHkgZnJvbSBCb3VuZGVkSW5wdXRTdHJlYW0ucmVhZChieXRlW10uLi4pICBJc3N1ZTogSU8tMjczLiBUaGFua3MgdG8gc2ViYi4gCm8gVmFyaW91cyBtZXRob2RzIG9mIGNsYXNzICdvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzJyBpbmNvcnJlY3RseSBzdXBwcmVzcyAnamF2YS5pby5JT0V4Y2VwdGlvbicgIElzc3VlOiBJTy0yOTguIFRoYW5rcyB0byBDaHJpc3RpYW4gU2NodWx0ZS4gCgpDaGFuZ2VzOgpvIFJlYWRlcklucHV0U3RyZWFtIG9wdGltaXphdGlvbjogbW9yZSBlZmZpY2llbnQgcmVhZGluZyBvZiBzbWFsbCBjaHVua3Mgb2YgZGF0YSAgSXNzdWU6IElPLTI5Ni4gVGhhbmtzIHRvIE9sZWcgS2FsbmljaGV2c2tpLiAKCgpDb21wYXRpYmlsaXR5IHdpdGggMi4xIGFuZCAxLjQ6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMKU291cmNlIGNvbXBhdGlibGU6IFllcwpTZW1hbnRpYyBjb21wYXRpYmxlOiBZZXMuIENoZWNrIHRoZSBidWcgZml4ZXMgc2VjdGlvbiBmb3Igc2VtYW50aWMgYnVnIGZpeGVzCgpDb21tb25zIElPIDIuMiByZXF1aXJlcyBhIG1pbmltdW0gb2YgSmF2YSA1LiAKQ29tbW9ucyBJTyAxLjQgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIEphdmEgMS4zLiAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDIuMQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk5ldyBmZWF0dXJlczoKbyBVc2Ugc3RhbmRhcmQgTWF2ZW4gZGlyZWN0b3J5IGxheW91dCAgSXNzdWU6IElPLTI4NS4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBBZGQgSU9VdGlscyBBUEkgdG9TdHJpbmcgZm9yIFVSTCBhbmQgVVJJIHRvIGdldCBjb250ZW50cyAgSXNzdWU6IElPLTI4NC4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBBZGQgQVBJIEZpbGVVdGlscy5jb3B5RmlsZShGaWxlIGlucHV0LCBPdXRwdXRTdHJlYW0gb3V0cHV0KSAgSXNzdWU6IElPLTI4Mi4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBGaWxlQWx0ZXJhdGlvbk9ic2VydmVyIGhhcyBubyBnZXR0ZXIgZm9yIEZpbGVGaWx0ZXIgIElzc3VlOiBJTy0yNjIuIApvIEFkZCBGaWxlVXRpbHMuZ2V0RmlsZSBBUEkgd2l0aCB2YXJhcmdzIHBhcmFtZXRlciAgSXNzdWU6IElPLTI2MS4gCm8gQWRkIG5ldyBBUFBFTkQgcGFyYW1ldGVyIGZvciB3cml0aW5nIHN0cmluZyBpbnRvIGZpbGVzICBJc3N1ZTogSU8tMTgyLiAKbyBBZGQgbmV3IHJlYWQgbWV0aG9kICJ0b0J5dGVBcnJheSIgdG8gaGFuZGxlIElucHV0U3RyZWFtIHdpdGgga25vd24gc2l6ZS4gIElzc3VlOiBJTy0yNTEuIFRoYW5rcyB0byBNYXJjbyBBbGJpbmkuIAoKRml4ZWQgQnVnczoKbyBEdWJpb3VzIHVzZSBvZiBta2RpcnMoKSByZXR1cm4gY29kZSAgSXNzdWU6IElPLTI4MC4gVGhhbmtzIHRvIHNlYmIuIApvIFJlYWRlcklucHV0U3RyZWFtIGVudGVycyBpbmZpbml0ZSBsb29wIHdoZW4gaXQgZW5jb3VudGVycyBhbiB1bm1hcHBhYmxlIGNoYXJhY3RlciAgSXNzdWU6IElPLTI3Ny4gCm8gRmlsZVV0aWxzLm1vdmVGaWxlKCkgSmF2YWRvYyBzaG91bGQgc3BlY2lmeSBGaWxlRXhpc3RzRXhjZXB0aW9uIHRocm93biAgSXNzdWU6IElPLTI2NC4gCm8gQ2xhc3NMb2FkZXJPYmplY3RJbnB1dFN0cmVhbSBkb2VzIG5vdCBoYW5kbGUgUHJveHkgY2xhc3NlcyAgSXNzdWU6IElPLTI2MC4gCm8gVGFpbGVyIHJldHVybmluZyBwYXJ0aWFsIGxpbmVzIHdoZW4gcmVhY2hpbmcgRU9GIGJlZm9yZSBFT0wgIElzc3VlOiBJTy0yNzQuIFRoYW5rcyB0byBGcmFuayBHcmltZXMuIApvIEZpbGVVdGlscy5jb3B5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB3aGVuIGNvcHlpbmcgbGFyZ2UgZmlsZXMgdG8gYSBzaGFyZWQgZGlyZWN0b3J5IChvbiBXaW5kb3dzKSAgSXNzdWU6IElPLTI2Ni4gVGhhbmtzIHRvIElnb3IgU21lcmVrYS4gCm8gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZUtiIHRocm93cyBleGNlcHRpb24gZm9yIFdpbmRvd3Mgdm9sdW1lcyB3aXRoIG5vIHZpc2libGUgZmlsZXMuCiAgICAgICAgSW1wcm92ZSBjb3ZlcmFnZSBieSBhbHNvIGxvb2tpbmcgZm9yIGhpZGRlbiBmaWxlcy4gIElzc3VlOiBJTy0yNjMuIFRoYW5rcyB0byBHaWwgQWRhbS4gCgpDaGFuZ2VzOgpvIEZpbGVBbHRlcmF0aW9uTW9uaXRvci5zdG9wKGJvb2xlYW4gYWxsb3dJbnRlcnZhbFRvRmluaXNoKSAgSXNzdWU6IElPLTI1OS4gCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gUGFja2FnZSAyLjAuMQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAyLjAgYW5kIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkNvbW1vbnMgSU8gMi4wLjEgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIEphdmEgNQogKENvbW1vbnMgSU8gMS40IGhhZCBhIG1pbmltdW0gb2YgSmF2YSAxLjMpIAoKRW5oYW5jZW1lbnRzIGZyb20gMi4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgKiBbSU8tMjU2XSAtIFByb3ZpZGUgdGhyZWFkIGZhY3RvcnkgZm9yIEZpbGVBbHRlcm5hdGlvbk1vbml0b3IKCkJ1ZyBmaXhlcyBmcm9tIDIuMAotLS0tLS0tLS0tLS0tLS0tLS0KCiAgICogW0lPLTI1N10gLSBCT01JbnB1dFN0cmVhbS5yZWFkKGJ5dGVbXSkgY2FuIHJldHVybiAwIHdoaWNoIGl0IHNob3VsZCBub3QKICAgKiBbSU8tMjU4XSAtIFhtbFN0cmVhbVJlYWRlciBjb25zdW1lcyB0aGUgc3RyZWFtIGR1cmluZyBlbmNvZGluZyBkZXRlY3Rpb24KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBQYWNrYWdlIDIuMAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIFllcwoKU291cmNlIGNvbXBhdGlibGUgLSBZZXMKClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKICBDaGVjayB0aGUgYnVnIGZpeGVzIHNlY3Rpb24gZm9yIHNlbWFudGljIGJ1ZyBmaXhlcwoKQ29tbW9ucyBJTyAyLjAgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIEphdmEgNQogKENvbW1vbnMgSU8gMS40IGhhZCBhIG1pbmltdW0gb2YgSmF2YSAxLjMpIAoKRGVwcmVjYXRpb25zIGZyb20gMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLSBJT1V0aWxzCiAgLSB3cml0ZShTdHJpbmdCdWZmZXIsIFdyaXRlcikgaW4gZmF2b3VyIG9mIHdyaXRlKENoYXJTZXF1ZW5jZSwgV3JpdGVyKQogIC0gd3JpdGUoU3RyaW5nQnVmZmVyLCBPdXRwdXRTdHJlYW0pICBpbiBmYXZvdXIgb2Ygd3JpdGUoQ2hhclNlcXVlbmNlLCBPdXRwdXRTdHJlYW0pCiAgLSB3cml0ZShTdHJpbmdCdWZmZXIsIE91dHB1dFN0cmVhbSwgU3RyaW5nKSBpbiBmYXZvdXIgb2Ygd3JpdGUoQ2hhclNlcXVlbmNlLCBPdXRwdXRTdHJlYW0sIFN0cmluZykKCi0gRmlsZUZpbHRlclV0aWxzCiAgLSBhbmRGaWxlRmlsdGVyKElPRmlsZUZpbHRlciwgSU9GaWxlRmlsdGVyKSBpbiBmYXZvdXIgb2YgYW5kKElPRmlsZUZpbHRlci4uLikgCiAgLSBvckZpbGVGaWx0ZXIoSU9GaWxlRmlsdGVyLCBJT0ZpbGVGaWx0ZXIpICBpbiBmYXZvdXIgb2Ygb3IoSU9GaWxlRmlsdGVyLi4uKQoKRW5oYW5jZW1lbnRzIGZyb20gMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAqIFtJTy0xNDBdIE1vdmUgbWluaW11bSBKYXZhIHJlcXVpcmVtZW50IGZyb20gSmF2YSAxLjMgdG8gSmF2YSA1CiAgICAgICAgICAgICAtIHVzZSBHZW5lcmljcwogICAgICAgICAgICAgLSBhZGQgbmV3IENoYXJTZXF1ZW5jZSB3cml0ZSgpIGZsYXZvdXIgbWV0aG9kcyB0byBJT1V0aWxzIGFuZCBGaWxlVXRpbHMKICAgICAgICAgICAgIC0gcmVwbGFjZSBTdHJpbmdCdWZmZXIgd2l0aCBTdHJpbmdCdWlsZGVyLCB3aGVyZSBhcHByb3ByaWF0ZQogICAgICAgICAgICAgLSBhZGQgbmV3IFJlYWRlci9Xcml0ZXIgbWV0aG9kcyB0byBQcm94eVJlYWRlciBhbmQgUHJveHlXcml0ZXIKICAgICAgICAgICAgIC0gQW5ub3RhdGUgd2l0aCBAT3ZlcnJpZGUgYW5kIEBEZXByZWNhdGVkCgogICogW0lPLTE3OF0gTmV3IEJPTUlucHV0U3RyZWFtIGFuZCBCeXRlT3JkZXJNYXJrIGltcGxlbWVudGF0aW9ucyAtIHRvIGRldGVjdCBhbmQgb3B0aW9uYWxseSBleGNsdWRlIGFuIGluaXRpYWwgQnl0ZSBPcmRlciBtYXJrIChCT00pCiAgKiBbSU8tMTk3XSBOZXcgQm91bmRlZElucHV0U3RyZWFtIChjb3BpZWQgZnJvbSBmcm9tIEFwYWNoZSBKYWNrUmFiYml0KQogICogW0lPLTE5M10gTmV3IEJyb2tlbiBJbnB1dCBhbmQgT3V0cHV0IHN0cmVhbXMKICAqIFtJTy0xMzJdIE5ldyBGaWxlIExpc3RlbmVyL01vbml0b3IgZmFjaWxpdHkKICAqIFtJTy0xNThdIE5ldyBSZWFkZXJJbnB1dFN0cmVhbSBhbmQgV3JpdGVyT3V0cHV0U3RyZWFtIGltcGxlbWVudGF0aW9ucwogICogW0lPLTEzOV0gTmV3IFN0cmluZ0J1aWxkZXIgV3JpdGVyIGltcGxlbWVudGF0aW9uCiAgKiBbSU8tMTkyXSBOZXcgVGFnZ2VkIElucHV0IGFuZCBPdXRwdXQgc3RyZWFtcwogICogW0lPLTE3N10gTmV3IFRhaWxlciBjbGFzcyAtIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVW5peCAidGFpbCAtZiIgZnVuY3Rpb25hbGl0eQogICogW0lPLTE2Ml0gTmV3IFhNTCBTdHJlYW0gUmVhZGVyL1dyaXRlciBpbXBsZW1lbnRhdGlvbnMgKGZyb20gUk9NRSB2aWEgcGxleHVzLXV0aWxzKQoKICAqIFtJTy0xNDJdIENvbXBhcmF0b3JzIC0gYWRkIGZhY2lsaXR5IHRvIHNvcnQgZmlsZSBsaXN0cy9hcnJheXMKICAqIFtJTy0xODZdIENvbXBhcmF0b3JzIC0gbmV3IENvbXBvc2l0ZSBhbmQgRGlyZWN0b3J5IEZpbGUgQ29tcGFyYXRvciBpbXBsZW1lbnRhdGlvbnMKICAqIFtJTy0xNzZdIERpcmVjdG9yeVdhbGtlciAtIGFkZCBmaWx0ZXJEaXJlY3RvcnlDb250ZW50cygpIGNhbGxiYWNrIG1ldGhvZCBmb3IgZmlsdGVyaW5nIGRpcmVjdG9yeSBjb250ZW50cwogICogW0lPLTIxMF0gRmlsZUZpbHRlciAtIG5ldyBNYWdpYyBOdW1iZXIgRmlsZUZpbHRlcgogICogW0lPLTIyMV0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIG1ldGhvZHMgZm9yIHN1ZmZpeCBhbmQgcHJlZml4IGZpbHRlcnMgd2hpY2ggdGFrZSBhbiBJT0Nhc2Ugb2JqZWN0CiAgKiBbSU8tMjMyXSBGaWxlRmlsdGVyVXRpbHMgLSBhZGQgbWV0aG9kIGZvciBuYW1lIGZpbHRlcnMgd2hpY2ggdGFrZSBhbiBJT0Nhc2Ugb2JqZWN0CiAgKiBbSU8tMjI5XSBGaWxlRmlsdGVyVXRpbHMgLSBhZGQgdmFyYXJncyBhbmQoKSBhbmQgb3IoKSBtZXRob2RzCiAgKiBbSU8tMTk4XSBGaWxlRmlsdGVyVXRpbHMgLSBhZGQgYWJpbGl0eSB0byBhcHBseSBmaWxlIGZpbHRlcnMgdG8gY29sbGVjdGlvbnMgYW5kIGFycmF5cwogICogW0lPLTE1Nl0gRmlsZW5hbWVVdGlscyAtIGFkZCBub3JtYWxpemUoKSBhbmQgbm9ybWFsaXplTm9FbmRTZXBhcmF0b3IoKSBtZXRob2RzIHdoaWNoIGFsbG93IHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIHRvIGJlIHNwZWNpZmllZAogICogW0lPLTE5NF0gRmlsZVN5c3RlbVV0aWxzIC0gYWRkIGZyZWVTcGFjZUtiKCkgbWV0aG9kIHdpdGggbm8gaW5wdXQgYXJndW1lbnRzCiAgKiBbSU8tMTg1XSBGaWxlU3lzdGVtVXRpbHMgLSBhZGQgZnJlZVNwYWNlS2IoKSBtZXRob2RzIHRoYXQgdGFrZSBhIHRpbWVvdXQgcGFyYW1ldGVyIC0gZml4ZXMgZnJlZVNwYWNlV2luZG93cygpIGJsb2NrcwogICogW0lPLTE1NV0gRmlsZVV0aWxzIC0gdXNlIE5JTyB0byBjb3B5IGZpbGVzCiAgKiBbSU8tMTY4XSBGaWxlVXRpbHMgLSBhZGQgbmV3IGlzU3ltbGluaygpIG1ldGhvZAogICogW0lPLTIxOV0gRmlsZVV0aWxzIC0gdGhyb3cgRmlsZUV4aXN0c0V4Y2VwdGlvbiB3aGVuIG1vdmluZyBhIGZpbGUgb3IgZGlyZWN0b3J5IGlmIHRoZSBkZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0cwogICogW0lPLTIzNF0gRmlsZVV0aWxzIC0gYWRkIE1ldGhvZHMgZm9yIHJldHJpZXZpbmcgU3lzdGVtIFVzZXIvVGVtcCBkaXJlY3Rvcmllcy9wYXRocwogICogW0lPLTIwOF0gRmlsZVV0aWxzIC0gYWRkIHRpbWVvdXQgKGNvbm5lY3Rpb24gYW5kIHJlYWQpIHN1cHBvcnQgZm9yIGNvcHlVUkxUb0ZpbGUoKSBtZXRob2QgCiAgKiBbSU8tMjM4XSBGaWxlVXRpbHMgLSBhZGQgc2l6ZU9mKEZpbGUpIG1ldGhvZAogICogW0lPLTE4MV0gTGluZUl0ZXJhdG9yIG5vdyBpbXBsZW1lbnRzIEl0ZXJhYmxlCiAgKiBbSU8tMjI0XSBJT1V0aWxzIC0gYWRkIGNsb3NlUXVpZXRseShDbG9zZWFibGUpIGFuZCBjbG9zZVF1aWV0bHkoU29ja2V0KSBtZXRob2RzCiAgKiBbSU8tMjAzXSBJT1V0aWxzIC0gYWRkIHNraXBGdWxseSgpIG1ldGhvZCBmb3IgSW5wdXRTdHJlYW1zCiAgKiBbSU8tMTM3XSBJT1V0aWxzIGFuZCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gLSBhZGQgdG9CdWZmZXJlZElucHV0U3RyZWFtKCkgbWV0aG9kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFycmF5IGFsbG9jYXRpb24vY29weQogICogW0lPLTE5NV0gUHJveHkgc3RyZWFtcy9SZWFkZXIvV3JpdGVyIC0gcHJvdmlkZSBleGNlcHRpb24gaGFuZGxpbmcgbWV0aG9kcwogICogW0lPLTIxMV0gUHJveHkgSW5wdXQvT3V0cHV0IHN0cmVhbXMgLSBhZGQgcHJlL3Bvc3QgcHJvY2Vzc2luZyBzdXBwb3J0CiAgKiBbSU8tMjQyXSBQcm94eSBSZWFkZXIvV3JpdGVyIC0gYWRkIHByZS9wb3N0IHByb2Nlc3Npbmcgc3VwcG9ydAoKQnVnIGZpeGVzIGZyb20gMS40Ci0tLS0tLS0tLS0tLS0tLS0tLQogICogW0lPLTIxNF0gQnl0ZUFycmF5T3V0cHV0U3RyZWFtIC0gZml4IGluY29uc2lzdGVudCBzeW5jaHJvbml6YXRpb24gb2YgZmllbGRzCiAgKiBbSU8tMjAxXSBDb3VudGluZyBJbnB1dC9PdXRwdXQgc3RyZWFtcyAtIGZpeCBpbmNvbnNpc3RlbnQgc3luY2hyb25pemF0aW9uCiAgKiBbSU8tMTU5XSBGaWxlQ2xlYW5pbmdUcmFja2VyIC0gZml4IHJlbW92ZSgpIG5ldmVyIHJldHVybnMgbnVsbAogICogW0lPLTIyMF0gRmlsZUNsZWFuaW5nVHJhY2tlciAtIGZpeCBWZWN0b3IgcGVyZm9ybXMgYmFkbHkgdW5kZXIgbG9hZAogICogW0lPLTE2N10gRmlsZW5hbWVVdGlscyAtIGZpeCBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZyBoYW5kbGluZyBpbiBGaWxlbmFtZVV0aWxzIGFuZCBGaWxlc3lzdGVtVXRpbHMKICAqIFtJTy0xNzldIEZpbGVuYW1lVXRpbHMgLSBmaXggU3RyaW5nSW5kZXhPdXRPZkJvdW5kcyBleGNlcHRpb24gaW4gZ2V0UGF0aE5vRW5kU2VwYXJhdG9yKCkKICAqIFtJTy0yNDhdIEZpbGVuYW1lVXRpbHMgLSBmaXggZ2V0RnVsbFBhdGhOb0VuZFNlcGFyYXRvcigpIHJldHVybnMgZW1wdHkgd2hpbGUgcGF0aCBpcyBhIG9uZSBsZXZlbCBkaXJlY3RvcnkKICAqIFtJTy0yNDZdIEZpbGVuYW1lVXRpbHMgLSBmaXggd2lsZGNhcmRNYXRjaCBnaXZlcyBpbmNvcnJlY3QgcmVzdWx0cyAKICAqIFtJTy0xODddIEZpbGVTeXN0ZW1VdGlscyAtIGZpeCBmcmVlU3BhY2VLYigpIGRvZXNuJ3Qgd29yayB3aXRoIHJlbGF0aXZlIHBhdGhzIG9uIExpbnV4CiAgKiBbSU8tMTYwXSBGaWxlU3lzdGVtVXRpbHMgLSBmaXggZnJlZVNwYWNlKCkgZmFpbHMgb24gc29sYXJpcwogICogW0lPLTIwOV0gRmlsZVN5c3RlbVV0aWxzIC0gZml4IGZyZWVTcGFjZUtiKCkgZmFpbHMgdG8gcmV0dXJuIGNvcnJlY3Qgc2l6ZSBmb3IgYSB3aW5kb3dzIG1vdW50IHBvaW50CiAgKiBbSU8tMTYzXSBGaWxlVXRpbHMgLSBmaXggdG9VUkxzKCkgdXNpbmcgZGVwcmVjYXRlZCBtZXRob2Qgb2YgY29udmVyc2lvbiB0byBVUkwKICAqIFtJTy0xNjhdIEZpbGVVdGlscyAtIGZpeCBTeW1ib2xpYyBsaW5rcyBmb2xsb3dlZCB3aGVuIGRlbGV0aW5nIGRpcmVjdG9yeQogICogW0lPLTIzMV0gRmlsZVV0aWxzIC0gZml4IHdyb25nIGV4Y2VwdGlvbiBtZXNzYWdlIGdlbmVyYXRlZCBpbiBpc0ZpbGVOZXdlcigpIG1ldGhvZAogICogW0lPLTIwN10gRmlsZVV0aWxzIC0gZml4IHJhY2UgY29uZGl0aW9uIGluIGZvcmNlTWtkaXIoKSBtZXRob2QKICAqIFtJTy0yMTddIEZpbGVVdGlscyAtIGZpeCBjb3B5RGlyZWN0b3J5VG9EaXJlY3RvcnkoKSBtYWtlcyBpbmZpbml0ZSBsb29wcwogICogW0lPLTE2Nl0gRmlsZVV0aWxzIC0gZml4IFVSTCBkZWNvZGluZyBpbiB0b0ZpbGUoVVJMKQogICogW0lPLTE5MF0gRmlsZVV0aWxzIC0gZml4IGNvcHlEaXJlY3Rvcnkgbm90IHByZXNlcnZpbmcgbGFzdG1vZGlmaWVkIGRhdGUgb24gc3ViLWRpcmVjdG9yaWVzCiAgKiBbSU8tMjQwXSBGaWxlRmlsdGVyVXRpbHMgLSBlbnN1cmUgY3ZzRmlsdGVyIGFuZCBzdm5GaWx0ZXIgYXJlIG9ubHkgY3JlYXRlZCBvbmNlLgogICogW0lPLTE3NV0gSU9VdGlscyAtIGZpeCBjb3B5RmlsZSgpIGlzc3VlcyB3aXRoIHZlcnkgbGFyZ2UgZmlsZXMKICAqIFtJTy0xOTFdIEltcHJvdmVtZW50cyBmcm9tIHN0YXRpYyBhbmFseXNpcwogICogW0lPLTIxNl0gTG9ja2FibGVGaWxlV3JpdGVyIC0gZGVsZXRlIGZpbGVzIHF1aWV0bHkgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyBpbml0aWFsaXphdGlvbgogICogW0lPLTI0M10gU3dhcHBlZERhdGFJbnB1dFN0cmVhbSAtIGZpeCByZWFkQm9vbGVhbiBpcyBpbnZlcnRlZAogICogW0lPLTIzNV0gVGVzdHMgLSByZW1vdmUgdW51c2VkIFllbGxPbkZsdXNoQW5kQ2xvc2VPdXRwdXRTdHJlYW0gZnJvbSBDb3B5VXRpbHNUZXN0CiAgKiBbSU8tMTYxXSBUZXN0cyAtIGZpeCBGaWxlQ2xlYW5pbmdUcmFja2VyVGVzdENhc2UgaGFuZ2luZwoKRG9jdW1lbnRhdGlvbiBjaGFuZ2VzIGZyb20gMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogW0lPLTE4MyBGaWxlbmFtZVV0aWxzLmdldEV4dGVuc2lvbigpIG1ldGhvZCBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cwogICogW0lPLTIyNiBGaWxlVXRpbHMuYnl0ZUNvdW50VG9EaXNwbGF5U2l6ZSgpIGRvY3VtZW50YXRpb24gY29ycmVjdGlvbnMKICAqIFtJTy0yMDUgRmlsZVV0aWxzLmZvcmNlTWtkaXIoKSBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cwogICogW0lPLTIxNSBGaWxlVXRpbHMgY29weSBmaWxlL2RpcmVjdG9yeSBpbXByb3ZlIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHByZXNlcnZpbmcgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZQogICogW0lPLTE4OSBIZXhEdW1wLmR1bXAoKSBtZXRob2QgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKICAqIFtJTy0xNzEgSU9DYXNlIGRvY3VtZW50IHRoYXQgaXQgYXNzdW1lcyB0aGVyZSBhcmUgb25seSB0d28gT1NlczogV2luZG93cyBhbmQgVW5peAogICogW0lPLTIyMyBJT1V0aWxzLmNvcHkoKSBkb2N1bWVudGF0aW9uIGNvcnJlY3Rpb25zCiAgKiBbSU8tMjQ3IElPVXRpbHMuY2xvc2VRdWlldGx5KCkgaW1wcm92ZSBkb2N1bWVudGF0aW9uIHdpdGggZXhhbXBsZXMKICAqIFtJTy0yMDIgTm90RmlsZUZpbHRlciBkb2N1bWVudGF0aW9uIGNvcnJlY3Rpb25zCiAgKiBbSU8tMjA2IFByb3h5SW5wdXRTdHJlYW0gLSBmaXggbWlzbGVhZGluZyBwYXJhbWV0ZXIgbmFtZXMKICAqIFtJTy0yMTIgUHJveHlJbnB1dFN0cmVhbS5za2lwKCkgZG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMS40Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tcGF0aWJpbGl0eSB3aXRoIDEuMy4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIFllcwoKU291cmNlIGNvbXBhdGlibGUgLSBZZXMKClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKICBDaGVjayB0aGUgYnVnIGZpeGVzIHNlY3Rpb24gZm9yIHNlbWFudGljIGJ1ZyBmaXhlcwoKQ29tbW9ucyBJTyAxLjQgaW50cm9kdWNlcyBmb3VyIG5ldyBpbXBsZW1lbnRhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIEphdmEgNCBmZWF0dXJlcwooQ2hhclNlcXVlbmNlUmVhZGVyLCBGaWxlV3JpdGVyV2l0aEVuY29kaW5nLCBJT0V4Y2VwdGlvbldpdGhDYXVzZSBhbmQgUmVnZXhGaWxlRmlsdGVyKS4KSXQgaGFzIGJlZW4gYnVpbHQgd2l0aCB0aGUgSkRLIHNvdXJjZSBhbmQgdGFyZ2V0IG9wdGlvbnMgc2V0IHRvIEphdmEgMS4zIGFuZCwgZXhjZXB0IGZvcgp0aG9zZSBpbXBsZW1lbnRhdGlvbnMsIGNhbiBiZSB1c2VkIHdpdGggSmF2YSAxLjMgKHNlZSBJTyBJTy0xMjcpLgoKRGVwcmVjYXRpb25zIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlQ2xlYW5lciBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBGaWxlQ2xlYW5pbmdUcmFja2VyIFtzZWUgSU8tMTE2XQoKQnVnIGZpeGVzIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlVXRpbHMKICAtIGZvcmNlRGVsZXRlIG9mIG9ycGhhbmVkIFNvZnRsaW5rcyBkb2VzIG5vdCB3b3JrIFtJTy0xNDddCiAgLSBJbmZpbml0ZSBsb29wIG9uIEZpbGVVdGlscy5jb3B5RGlyZWN0b3J5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBpcyB3aXRoaW4KICAgIHRoZSBzb3VyY2UgZGlyZWN0b3J5IFtJTy0xNDFdCiAgLSBBZGQgYSBjb3B5RGlyZWN0b3J5KCkgbWV0aG9kIHRoYXQgbWFrZXMgdXNlIG9mIEZpbGVGaWx0ZXIgW0lPLTEwNV0KICAtIEFkZCBtb3ZlRGlyZWN0b3J5KCkgYW5kIG1vdmVGaWxlKCkgbWV0aG9kcyBbSU8tNzddCgotIEhleER1bXAKICAtIEhleER1bXAncyB1c2Ugb2Ygc3RhdGljIFN0cmluZ0J1ZmZlcnMgaXNuJ3QgdGhyZWFkLXNhZmUgW0lPLTEzNl0KCkVuaGFuY2VtZW50cyBmcm9tIDEuMy4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZVV0aWxzCiAgLSBBZGQgYSBkZWxldGVRdWlldGx5IG1ldGhvZCBbSU8tMTM1XQoKLSBGaWxlbmFtZVV0aWxzCiAgLSBBZGQgZmlsZSBuYW1lIGV4dGVuc2lvbiBzZXBhcmF0b3IgY29uc3RhbnRzW0lPLTE0OV0KCi0gSU9FeGNlcHRpb25XaXRoQ2F1c2UgW0lPLTE0OF0KICAtIEFkZCBhIG5ldyBJT0V4Y2VwdGlvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIGNvbnN0cnVjdG9ycyB3aGljaCB0YWtlIGEgY2F1c2UKCi0gVGVlSW5wdXRTdHJlYW0gW0lPLTEyOV0KICAtIEFkZCBuZXcgVGVlIGlucHV0IHN0cmVhbSBpbXBsZW1lbnRhdGlvbgoKLSBGaWxlV3JpdGVyV2l0aEVuY29kaW5nIFtJTy0xNTNdCiAgLSBBZGQgbmV3IEZpbGUgV3JpdGVyIGltcGxlbWVudGF0aW9uIHRoYXQgYWNjZXB0cyBhbiBlbmNvZGluZwoKLSBDaGFyU2VxdWVuY2VSZWFkZXIgW0lPLTEzOF0KICAtIEFkZCBuZXcgUmVhZGVyIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBhbnkgQ2hhclNlcXVlbmNlIChTdHJpbmcsCiAgICBTdHJpbmdCdWZmZXIsIFN0cmluZ0J1aWxkZXIgb3IgQ2hhckJ1ZmZlcikgCgotIFRoZXNob2xkaW5nT3VwdXRTdHJlYW0gW0lPLTEyMV0KICAtIEFkZCBhIHJlc2V0KCkgbWV0aG9kIHdoaWNoIHNldHMgdGhlIGNvdW50IG9mIHRoZSBieXRlcyB3cml0dGVuIGJhY2sgdG8gemVyby4KCi0gRGVmZXJyZWRGaWxlT3V0cHV0U3RyZWFtIFtJTy0xMzBdCiAgLSBBZGQgc3VwcG9ydCBmb3IgdGVtcG9yYXJ5IGZpbGVzCgotIEJ5dGVBcnJheU91dHB1dFN0cmVhbQogIC0gQWRkIGEgbmV3IHdyaXRlKElucHV0U3RyZWFtKSBtZXRob2QgW0lPLTE1Ml0KCi0gTmV3IENsb3NlZCBJbnB1dC9PdXRwdXQgc3RyZWFtIGltcGxlbWVudGF0aW9ucyBbSU8tMTIyXQogIC0gQXV0b0Nsb3NlSW5wdXRTdHJlYW0gLSBhdXRvbWF0aWNhbGx5IGNsb3NlcyBhbmQgZGlzY2FyZHMgdGhlIHVuZGVybHlpbmcgaW5wdXQgc3RyZWFtCiAgLSBDbG9zZWRJbnB1dFN0cmVhbSAtIHJldHVybnMgLTEgZm9yIGFueSByZWFkIGF0dGVtcHRzCiAgLSBDbG9zZWRPdXRwdXRTdHJlYW0gLSB0aHJvd3MgYW4gSU9FeGNlcHRpb24gZm9yIGFueSB3cml0ZSBhdHRlbXB0cwogIC0gQ2xvc2VTaGllbGRJbnB1dFN0cmVhbSAtIHByZXZlbnRzIHRoZSB1bmRlcmx5aW5nIGlucHV0IHN0cmVhbSBmcm9tIGJlaW5nIGNsb3NlZC4KICAtIENsb3NlU2hpZWxkT3V0cHV0U3RyZWFtIC0gcHJldmVudHMgdGhlIHVuZGVybHlpbmcgb3V0cHV0IHN0cmVhbSBmcm9tIGJlaW5nIGNsb3NlZC4KCi0gQWRkIFNpbmdsZXRvbiBDb25zdGFudHMgdG8gc2V2ZXJhbCBzdHJlYW0gY2xhc3NlcyBbSU8tMTQzXQoKLSBQcmVmaXhGaWxlRmlsdGVyIFtJTy0xMjZdCiAgLSBBZGQgZmFjaWx0aXkgdG8gc3BlY2lmeSBjYXNlIHNlbnNpdGl2aXR5IG9uIHByZWZpeCBtYXRjaGluZwoKLSBTdWZmaXhGaWxlRmlsdGVyIFtJTy0xMjZdCiAgLSBBZGQgZmFjaWx0aXkgdG8gc3BlY2lmeSBjYXNlIHNlbnNpdGl2aXR5IG9uIHN1ZmZpeCBtYXRjaGluZwoKLSBSZWdleEZpbGVGaWx0ZXIgW0lPLTc0XQogIC0gQWRkIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gZmlsZSBmaWx0ZXIgaW1wbGVtZW50YXRpb24KCi0gTWFrZSBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb25zIFNlcmlhbGl6YWJsZSBbSU8tMTMxXQoKLSBJbXByb3ZlIElPRmlsZUZpbHRlciB0b1N0cmluZygpIG1ldGhvZHMgW0lPLTEyMF0KCi0gTWFrZSBmaWVsZHMgZmluYWwgc28gY2xhc3NlcyBhcmUgaW1tdXRhYmxlL3RocmVhZHNhZmUgW0lPLTEzM10KICAtIGNoYW5nZXMgdG8gQWdlLCBEZWxlZ2F0ZSwgTmFtZSwgTm90LCBQcmVmaXgsIFJlZ2V4LCBTaXplLCBTdWZmaXggYW5kIFdpbGRjYXJkIElPRmlsZUZpbHRlcgogICAgaW1wbGVtZW50YXRpb25zLgoKLSBJT0Nhc2UKICAtIEFkZCBhIGNvbXBhcmUgbWV0aG9kIHRvIElPQ2FzZSBbSU8tMTQ0XQoKLSBBZGQgYSBwYWNrYWdlIG9mIGphdmEudXRpbC5Db21wYXJhdG9yIGltcGxlbWVudGF0aW9ucyBmb3IgZmlsZXMgW0lPLTE0NV0KICAtIERlZmF1bHRGaWxlQ29tcGFyYXRvciAtIGNvbXBhcmUgZmlsZXMgdXNpbmcgdGhlIGRlZmF1bHQgRmlsZS5jb21wYXJlVG8oRmlsZSkgbWV0aG9kLgogIC0gRXh0ZW5zaW9uRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyBmaWxlIG5hbWUgZXh0ZW5zaW9ucy4KICAtIExhc3RNb2RpZmllZEZpbGVDb21wYXJhdG9yIC0gY29tcGFyZXMgZmlsZXMgdXNpbmcgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZS90aW1lLgogIC0gTmFtZUZpbGVDb21wYXJhdG9yIC0gY29tcGFyZXMgZmlsZXMgdXNpbmcgZmlsZSBuYW1lcy4KICAtIFBhdGhGaWxlQ29tcGFyYXRvciAtIGNvbXBhcmVzIGZpbGVzIHVzaW5nIGZpbGUgcGF0aHMuCiAgLSBTaXplRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyBmaWxlIHNpemVzLgogIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAxLjMuMgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjMuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKQ29tcGF0aWJpbGl0eSB3aXRoIDEuMwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gTm8KICBTZWUgW0lPLTExM10KClNvdXJjZSBjb21wYXRpYmxlIC0gTm8KICBTZWUgW0lPLTExM10KClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKCkVuaGFuY2VtZW50cyBzaW5jZSAxLjMuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0gQ3JlYXRlZCB0aGUgRmlsZUNsZWFuaW5nVHJhY2tlciwgYmFzaWNhbGx5IGEgbm9uLXN0YXRpYyB2ZXJzaW9uIG9mIHRoZQogIEZpbGVDbGVhbmVyLCB3aGljaCBjYW4gYmUgY29udHJvbGxlZCBieSB0aGUgdXNlci4gW0lPLTExNl0KLSBUaGUgRmlsZUNsZWFuZXIgaXMgZGVwcmVjYXRlZC4KCkJ1ZyBmaXhlcyBmcm9tIDEuMy4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgotIFNvbWUgdGVzdHMsIHdoaWNoIGFyZSBpbXBsaWNpdGx5IGFzc3VtaW5nIGEgVW5peC1saWtlIGZpbGUgc3lzdGVtLCBhcmUKICBub3cgc2tpcHBlZCBvbiBXaW5kb3dzLiBbSU8tMTE1XQotIEVuZGlhblV0aWxzCiAgLSBCb3RoIHJlYWRTd2FwcGVkVW5zaWduZWRJbnRlZ2VyKC4uLikgbWV0aG9kcyBjb3VsZCByZXR1cm4gbmVnYXRpdmUgCiAgICBudW1iZXJzIGR1ZSB0byBpbnQvbG9uZyBjYXN0aW5nLiBbSU8tMTE3XQoKQnVnIGZpeGVzIGZyb20gMS4zCi0tLS0tLS0tLS0tLS0tLS0tLQoKLSBGaWxlVXRpbHMKICAtIE5QRSBpbiBvcGVuT3V0cHV0U3RyZWFtKEZpbGUpIHdoZW4gZmlsZSBoYXMgbm8gcGFyZW50IGluIHBhdGggW0lPLTExMl0KICAtIHJlYWRGaWxlVG9TdHJpbmcoRmlsZSkgaXMgbm90IHN0YXRpYyBbSU8tMTEzXQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMS4zLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBObwogIFNlZSBbSU8tMTEzXQoKU291cmNlIGNvbXBhdGlibGUgLSBObwogIFNlZSBbSU8tMTEzXQoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKQnVnIGZpeGVzIGZyb20gMS4zCi0tLS0tLS0tLS0tLS0tLS0tLQoKLSBGaWxlVXRpbHMKICAtIE5QRSBpbiBvcGVuT3V0cHV0U3RyZWFtKEZpbGUpIHdoZW4gZmlsZSBoYXMgbm8gcGFyZW50IGluIHBhdGggW0lPLTExMl0KICAtIHJlYWRGaWxlVG9TdHJpbmcoRmlsZSkgaXMgbm90IHN0YXRpYyBbSU8tMTEzXQogIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAxLjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkRlcHJlY2F0aW9ucyBmcm9tIDEuMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBXaWxkY2FyZEZpbHRlciBkZXByZWNhdGVkLCByZXBsYWNlZCBieSBXaWxkY2FyZEZpbGVGaWx0ZXIKICAtIG9sZCBjbGFzcyBvbmx5IGFjY2VwdGVkIGZpbGVzLCB0aHVzIGhhZCBhIGNvbmZ1c2luZyBkdWFsIHB1cnBvc2UKCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZSBkZXByZWNhdGVkLCByZXBsYWNlZCBieSBmcmVlU3BhY2VLYgogIC0gZnJlZVNwYWNlIHJldHVybnMgYSByZXN1bHQgdGhhdCB2YXJpZXMgYnkgb3BlcmF0aW5nIHN5c3RlbSBhbmQKICAgIHRodXMgaXNuJ3QgdGhhdCB1c2VmdWwKICAtIGZyZWVTcGFjZUtiIHJldHVybnMgbXVjaCBiZXR0ZXIgYW5kIG1vcmUgY29uc2lzdGVudCByZXN1bHRzCiAgLSBmcmVlU3BhY2VLYiBleGlzdGVkIGluIHYxLjIsIHNvIHRoaXMgaXMgYSBnZW50bGUgY3V0b3ZlcgoKQnVnIGZpeGVzIGZyb20gMS4yCi0tLS0tLS0tLS0tLS0tLS0tLQotIExpbmVJdGVyYXRvciBub3cgaW1wbGVtZW50cyBJdGVyYXRvcgogIC0gSXQgd2FzIGFsd2F5cyBzdXBwb3NlZCB0by4uLgoKLSBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlL2ZyZWVTcGFjZUtiIFtJTy04M10KICAtIFRoZXNlIHNob3VsZCBub3cgd29yayBvbiBBSVggYW5kIEhQLVVYCgotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2UvZnJlZVNwYWNlS2IgW0lPLTkwXQogIC0gQXZvaWQgaW5maW5pdGUgbG9vcGluZyBpbiBXaW5kb3dzCiAgLSBDYXRjaCBtb3JlIGVycm9ycyB3aXRoIG5pY2UgbWVzc2FnZXMKCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZSBbSU8tOTFdCiAgLSBUaGlzIGlzIG5vdyBkb2N1bWVudGVkIG5vdCB0byB3b3JrIG9uIFN1bk9TIDUKCi0gRmlsZVN5c3RlbVV0aWxzIFtJTy05M10KICAtIEZpeGVkIHJlc291cmNlIGxlYWsgbGVhZGluZyB0byAnVG9vIG1hbnkgb3BlbiBmaWxlcycgZXJyb3IKICAtIFByZXZpb3VzbHkgZGlkIG5vdCBkZXN0cm95IFByb2Nlc3MgaW5zdGFuY2VzIChhcyBKREsgSmF2YWRvYyBpcyBzbyBwb29yKQogIC0gaHR0cDovL2J1Z3Muc3VuLmNvbS9idWdkYXRhYmFzZS92aWV3X2J1Zy5kbz9idWdfaWQ9NDgwMTAyNwoKLSBGaWxlVXRpbHMudG91Y2ggW0lPLTEwMF0KICAtIFRoZSB0b3VjaCBtZXRob2QgcHJldmlvdXNseSBnYXZlIG5vIGluZGljYXRpb24gd2hlbiB0aGUgZmlsZSBjb3VsZCBub3QKICAgIGJlIHRvdWNoZWQgc3VjY2Vzc2Z1bGx5IChzdWNoIGFzIGR1ZSB0byBhY2Nlc3MgcmVzdHJpY3Rpb25zKSAtIGl0IG5vdwogICAgdGhyb3dzIGFuIElPRXhjZXB0aW9uIGlmIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgY2Fubm90IGJlIGNoYW5nZWQKCi0gRmlsZUNsZWFuZXIKICAtIFRoaXMgbm93IGhhbmRsZXMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhbiBlcnJvciBvY2N1cnMgd2hlbiBkZWxldGluZyB0aGUgZmlsZQoKLSBJT1V0aWxzLmNvcHkgW0lPLTg0XQogIC0gQ29weSBtZXRob2RzIGNvdWxkIHJldHVybiBpbmFjY3VyYXRlIGJ5dGUvY2hhciBjb3VudCBmb3IgbGFyZ2Ugc3RyZWFtcwogIC0gVGhlIGNvcHkoSW5wdXRTdHJlYW0sIE91dHB1dFN0cmVhbSkgbWV0aG9kIG5vdyByZXR1cm5zIC0xIGlmIHRoZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gYW4gaW50CiAgLSBUaGUgY29weShSZWFkZXIsIFdyaXRlcikgbWV0aG9kIG5vdyB0aHJvd3Mgbm93IHJldHVybnMgLTEgaWYgdGhlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiBhbiBpbnQKICAtIEFkZGVkIGEgbmV3IGNvcHlMYXJnZShJbnB1dFN0cmVhbSwgT3V0cHV0U3RyZWFtKSBtZXRob2QgdGhhdCByZXR1cm5zIGEgbG9uZwogIC0gQWRkZWQgYSBuZXcgY29weUxhcmdlKFJlYWRlciwgV3JpdGVyKSBtZXRob2QgdGhhdCByZXR1cm5zIGEgbG9uZwoKLSBDb3VudGluZ0lucHV0U3RyZWFtL0NvdW50aW5nT3V0cHV0U3RyZWFtIFtJTy04NF0KICAtIE1ldGhvZHMgd2VyZSBkZWNsYXJlZCBhcyBpbnQgdGh1cyB0aGUgY291bnQgd2FzIGlubmFjdXJhdGUgZm9yIGxhcmdlIHN0cmVhbXMKICAtIG5ldyBsb25nIGJhc2VkIG1ldGhvZHMgZ2V0Qnl0ZUNvdW50KCkvcmVzZXRCeXRlQ291bnQoKSBhZGRlZAogIC0gZXhpc3RpbmcgbWV0aG9kcyBjaGFuZ2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgY291bnQgaXMgZ3JlYXRlciB0aGFuIGFuIGludAoKLSBGaWxlQmFzZWRUZXN0Q2FzZQogIC0gRml4ZWQgYnVnIGluIGNvbXBhcmUgY29udGVudCBtZXRob2RzIGlkZW50aWZpZWQgYnkgR05VIGNsYXNzcGF0aAoKLSBFbmRpYW5VdGlscy53cml0ZVN3YXBwZWRMb25nKGJ5dGVbXSwgaW50KSBbSU8tMTAxXQogIC0gQW4gaW50IG92ZXJydW4gaW4gdGhlIGJpdCBzaGlmdGluZyB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gYSBsb25nCgotIEVuZGlhblV0aWxzLndyaXRlU3dhcHBlZExvbmcoSW5wdXRTdHJlYW0pIFtJTy0xMDJdCiAgLSBUaGUgcmV0dXJuIG9mIGlucHV0LnJlYWQoYnl0ZVtdKSB3YXMgbm90IGJlaW5nIGNoZWNrZWQgdG8gZW5zdXJlIGFsbCA4IGJ5dGVzIHdlcmUgcmVhZAoKRW5oYW5jZW1lbnRzIGZyb20gMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIERpcmVjdG9yeVdhbGtlciBbSU8tODZdCiAgLSBOZXcgY2xhc3MgZGVzaWduZWQgZm9yIHN1YmNsYXNzaW5nIHRvIHdhbGsgdGhyb3VnaCBhIHNldCBvZiBmaWxlcy4KICAgIERpcmVjdG9yeVdhbGtlciBwcm92aWRlcyB0aGUgd2FsayBvZiB0aGUgZGlyZWN0b3JpZXMsIGZpbHRlcmluZyBvZgogICAgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLCBhbmQgY2FuY2VsbGF0aW9uIHN1cHBvcnQuIFRoZSBzdWJjbGFzcyBtdXN0IHByb3ZpZGUKICAgIHRoZSBzcGVjaWZpYyBiZWhhdmlvciwgc3VjaCBhcyB0ZXh0IHNlYXJjaGluZyBvciBpbWFnZSBwcm9jZXNzaW5nLgoKLSBJT0Nhc2UKICAtIE5ldyBjbGFzcy9lbnVtZXJhdGlvbiBmb3IgY2FzZS1zZW5zaXRpdml0eSBjb250cm9sCgotIEZpbGVuYW1lVXRpbHMKICAtIE5ldyBtZXRob2RzIHRvIGhhbmRsZSBjYXNlLXNlbnNpdGl2aXR5CiAgLSB3aWxkY2FyZE1hdGNoIC0gbmV3IG1ldGhvZCB0aGF0IGhhcyBJT0Nhc2UgYXMgYSBwYXJhbWV0ZXIKICAtIGVxdWFscyAtIG5ldyBtZXRob2QgdGhhdCBoYXMgSU9DYXNlIGFzIGEgcGFyYW1ldGVyCgotIEZpbGVVdGlscyBbSU8tMTA4XSAtIG5ldyBkZWZhdWx0IGVuY29kaW5nIG1ldGhvZHMgZm9yOgogIC0gcmVhZEZpbGVUb1N0cmluZyhGaWxlKQogIC0gcmVhZExpbmVzKEZpbGUpCiAgLSBsaW5lSXRlcmF0b3IoRmlsZSkKICAtIHdyaXRlU3RyaW5nVG9GaWxlKEZpbGUsIFN0cmluZykKICAtIHdyaXRlTGluZXMoRmlsZSwgQ29sbGVjdGlvbikKICAtIHdyaXRlTGluZXMoRmlsZSwgQ29sbGVjdGlvbiwgU3RyaW5nKQoKLSBGaWxlVXRpbHMub3Blbk91dHB1dFN0cmVhbSAgW0lPLTEwN10KICAtIG5ldyBtZXRob2QgdG8gb3BlbiBhIEZpbGVPdXRwdXRTdHJlYW0sIGNyZWF0aW5nIHBhcmVudCBkaXJlY3RvcmllcyBpZiByZXF1aXJlZAotIEZpbGVVdGlscy50b3VjaAotIEZpbGVVdGlscy5jb3B5VVJMVG9GaWxlCi0gRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlCi0gRmlsZVV0aWxzLndyaXRlQnl0ZUFycmF5VG9GaWxlCi0gRmlsZVV0aWxzLndyaXRlTGluZXMKICAtIGVuaGFuY2VkIHRvIGNyZWF0ZSBwYXJlbnQgZGlyZWN0b3JpZXMgaWYgcmVxdWlyZWQKLSBGaWxlVXRpbHMub3BlbklucHV0U3RyZWFtICBbSU8tMTA3XQogIC0gbmV3IG1ldGhvZCB0byBvcGVuIGEgRmlsZUlucHV0U3RyZWFtLCBwcm92aWRpbmcgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIHRoYW4gdGhlIEpESwoKLSBGaWxlVXRpbHMuaXNGaWxlT2xkZXIKICAtIG5ldyBtZXRob2RzIHRvIGNoZWNrIGlmIGEgZmlsZSBpcyBvbGRlciAoaS5lLiBpc0ZpbGVPbGRlcigpKSAtIGNvdW50ZXJwYXJ0cwogICAgdG8gdGhlIGV4aXN0aW5nIGlzRmlsZU5ld2VyKCkgbWV0aG9kcy4KCi0gRmlsZVV0aWxzLmNoZWNrc3VtLCBGaWxlVXRpbHMuY2hlY2tzdW1DUkMzMgogIC0gbmV3IG1ldGhvZHMgdG8gY3JlYXRlIGEgY2hlY2tzdW0gb2YgYSBmaWxlCgotIEZpbGVVdGlscy5jb3B5RmlsZVRvRGlyZWN0b3J5ICBbSU8tMTA0XQogIC0gbmV3IHZhcmlhbnQgdGhhdCBvcHRpb25hbGx5IHJldGFpbnMgdGhlIGZpbGUgZGF0ZQoKLSBGaWxlRGVsZXRlU3RyYXRlZ3kKLSBGaWxlQ2xlYW5lciAgICBbSU8tNTYsSU8tNzBdCiAgLSBGaWxlRGVsZXRlU3RyYXRlZ3kgaXMgYSBzdHJhdGVneSBmb3IgaGFuZGxpbmcgZmlsZSBkZWxldGlvbgogIC0gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIGNhbGJhY2sgaW4gRmlsZUNsZWFuZXIKICAtIFRvZ2V0aGVyIHRoZXNlIGFsbG93IEZpbGVDbGVhbmVyIHRvIGRvIGEgZm9yY2VEZWxldGUgdG8ga2lsbCBkaXJlY3RvcmllcwoKLSBGaWxlQ2xlYW5lci5leGl0V2hlbkZpbmlzaGVkIFtJTy05OV0KICAtIEEgbmV3IG1ldGhvZCB0aGF0IGFsbG93cyB0aGUgaW50ZXJuYWwgY2xlYW5lciB0aHJlYWQgdG8gYmUgY2xlYW5seSB0ZXJtaW5hdGVkCgotIFdpbGRjYXJkRmlsZUZpbHRlcgogIC0gUmVwbGFjZW1lbnQgZm9yIFdpbGRjYXJkRmlsdGVyCiAgLSBBY2NlcHRzIGJvdGggZmlsZXMgYW5kIGRpcmVjdG9yaWVzCiAgLSBBYmlsaXR5IHRvIGNvbnRyb2wgY2FzZS1zZW5zaXRpdml0eQoKLSBOYW1lRmlsZUZpbHRlcgogIC0gQWJpbGl0eSB0byBjb250cm9sIGNhc2Utc2Vuc2l0aXZpdHkKCi0gRmlsZUZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5pc0ZpbGUoKSBpcyB0cnVlCiAgLSBJbiBvdGhlciB3b3JkcyBpdCBmaWx0ZXJzIG91dCBkaXJlY3RvcmllcwogIC0gU2luZ2xldG9uIGluc3RhbmNlIHByb3ZpZGVkIChGSUxFKQoKLSBDYW5SZWFkRmlsZUZpbHRlcgogIC0gTmV3IElPRmlsZUZpbHRlciBpbXBsZW1lbnRhdGlvbgogIC0gQWNjZXB0cyBmaWxlcyB3aGVyZSBGaWxlLmNhblJlYWQoKSBpcyB0cnVlCiAgLSBTaW5nbGV0b24gaW5zdGFuY2VzIHByb3ZpZGVkIChDQU5fUkVBRC9DQU5OT1RfUkVBRC9SRUFEX09OTFkpCgotIENhbldyaXRlRmlsZUZpbHRlcgogIC0gTmV3IElPRmlsZUZpbHRlciBpbXBsZW1lbnRhdGlvbgogIC0gQWNjZXB0cyBmaWxlcyB3aGVyZSBGaWxlLmNhbldyaXRlKCkgaXMgdHJ1ZQogIC0gU2luZ2xldG9uIGluc3RhbmNlcyBwcm92aWRlZCAoQ0FOX1dSSVRFL0NBTk5PVF9XUklURSkKCi0gSGlkZGVuRmlsZUZpbHRlcgogIC0gTmV3IElPRmlsZUZpbHRlciBpbXBsZW1lbnRhdGlvbgogIC0gQWNjZXB0cyBmaWxlcyB3aGVyZSBGaWxlLmlzSGlkZGVuKCkgaXMgdHJ1ZQogIC0gU2luZ2xldG9uIGluc3RhbmNlcyBwcm92aWRlZCAoSElEREVOL1ZJU0lCTEUpCgotIEVtcHR5RmlsZUZpbHRlcgogIC0gTmV3IElPRmlsZUZpbHRlciBpbXBsZW1lbnRhdGlvbgogIC0gQWNjZXB0cyBmaWxlcyBvciBkaXJlY3RvcmllcyB0aGF0IGFyZSBlbXB0eQogIC0gU2luZ2xldG9uIGluc3RhbmNlcyBwcm92aWRlZCAoRU1QVFkvTk9UX0VNUFRZKQoKLSBUcnVlRmlsZUZpbHRlci9GYWxzZUZpbGVGaWx0ZXIvRGlyZWN0b3J5RmlsZUZpbHRlcgogIC0gTmV3IHNpbmdsZXRvbiBpbnN0YW5jZSBjb25zdGFudHMgKFRSVUUvRkFMU0UvRElSRUNUT1JZKQogIC0gVGhlIG5ldyBjb25zdGFudHMgYXJlIG1vcmUgSmF2YSA1IGZyaWVuZGx5IHdpdGggcmVnYXJkcyB0byBzdGF0aWMgaW1wb3J0cwogICAgKHdoZXJlYXMgaWYgZXZlcnl0aGluZyB1c2VzIElOU1RBTkNFLCB0aGVuIHRoZXkganVzdCBjbGFzaCkKICAtIFRoZSBvbGQgSU5TVEFOQ0UgY29uc3RhbnRzIGFyZSBzdGlsbCBwcmVzZW50IGFuZCBoYXZlIG5vdCBiZWVuIGRlcHJlY2F0ZWQKCi0gRmlsZUZpbHRlclV0aWxzLnNpemVSYW5nZUZpbGVGaWx0ZXIKICAtIG5ldyBzaXplUmFuZ2VGaWxlRmlsdGVyKGxvbmcgbWluaW11bVNpemUsIGxvbmcgbWF4aW11bVNpemUpIG1ldGhvZCB3aGljaCAKICAgIGNyZWF0ZXMgYSBmaWx0ZXIgdGhhdCBhY2NlcHRzIGZpbGVzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHNpemUgcmFuZ2UuCgotIEZpbGVGaWx0ZXJVdGlscy5tYWtlRGlyZWN0b3J5T25seS9tYWtlRmlsZU9ubHkKICAtIHR3byBuZXcgbWV0aG9kcyB0aGF0IGRlY29yYXRlIGEgZmlsZSBmaWx0ZXIgdG8gbWFrZSBpdCBhcHBseSB0bwogICAgZGlyZWN0b3JpZXMgb25seSBvciBmaWxlcyBvbmx5CgotIE51bGxXcml0ZXIKICAtIE5ldyB3cml0ZXIgdGhhdCBhY3RzIGFzIGEgc2luayBmb3IgYWxsIGRhdGEsIGFzIHBlciAvZGV2L251bGwKCi0gTnVsbElucHV0U3RyZWFtCiAgLSBOZXcgaW5wdXQgc3RyZWFtIHRoYXQgZW11bGF0ZXMgYSBzdHJlYW0gb2YgYSBzcGVjaWZpZWQgc2l6ZQoKLSBOdWxsUmVhZGVyCiAgLSBOZXcgcmVhZGVyIHRoYXQgZW11bGF0ZXMgYSByZWFkZXIgb2YgYSBzcGVjaWZpZWQgc2l6ZQoKLSBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gIFtJTy05N10KICAtIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMS4yCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tcGF0aWJpbGl0eSB3aXRoIDEuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKRGVwcmVjYXRpb25zIGZyb20gMS4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQnVnIGZpeGVzIGZyb20gMS4xCi0tLS0tLS0tLS0tLS0tLS0tLQotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2UoZHJpdmUpCiAgRml4IHRvIGFsbG93IFdpbmRvd3MgYmFzZWQgY29tbWFuZCB0byBmdW5jdGlvbiBpbiBGcmVuY2ggbG9jYWxlCgotIEZpbGVVdGlscy5yZWFkKgogIEluY3JlYXNlIGNlcnRhaW50eSB0aGF0IGZpbGVzIGFyZSBjbG9zZWQgaW4gY2FzZSBvZiBlcnJvcgoKLSBMb2NrYWJsZUZpbGVXcml0ZXIKICBMb2NraW5nIG1lY2hhbmlzbSB3YXMgYnJva2VuIGFuZCBvbmx5IHByb3ZpZGVkIGxpbWl0ZWQgcHJvdGVjdGlvbiBbMzg5NDJdCiAgRmlsZSBkZWxldGlvbiBhbmQgbG9ja2luZyBpbiBjYXNlIG9mIGNvbnN0cnVjdG9yIGVycm9yIHdhcyBicm9rZW4KCkVuaGFuY2VtZW50cyBmcm9tIDEuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBBZ2VGaWxlRmlsdGVyL1NpemVGaWxlRmlsdGVyCiAgTmV3IGZpbGUgZmlsdGVycyB0aGF0IGNvbXBhcmVzIGFnYWluc3QgdGhlIGFnZSBhbmQgc2l6ZSBvZiB0aGUgZmlsZQoKLSBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlS2IoZHJpdmUpCiAgTmV3IG1ldGhvZCB0aGF0IHVuaWZpZXMgcmVzdWx0IHRvIGJlIGluIGtpbG9ieXRlcyBbMzg1NzRdCgotIEZpbGVVdGlscy5jb250ZW50RXF1YWxzKEZpbGUsRmlsZSkKICBQZXJmb3JtYW5jZSBpbXByb3ZlZCBieSBhZGRpbmcgbGVuZ3RoIGFuZCBmaWxlIGxvY2F0aW9uIGNoZWNraW5nCgotIEZpbGVVdGlscy5pdGVyYXRlRmlsZXMKICBUd28gbmV3IG1ldGhvZCB0byBwcm92aWRlIGRpcmVjdCBhY2Nlc3MgdG8gaXRlcmF0b3JzIG92ZXIgZmlsZXMKCi0gRmlsZVV0aWxzLmxpbmVJdGVyYXRvcgogIElPVXRpbHMubGluZUl0ZXJhdG9yCiAgTmV3IG1ldGhvZHMgdG8gcHJvdmlkZSBhbiBpdGVyYXRvciBvdmVyIHRoZSBsaW5lcyBpbiBhIGZpbGUgWzM4MDgzXQoKLSBGaWxlVXRpbHMuY29weURpcmVjdG9yeVRvRGlyZWN0b3J5CiAgTmV3IG1ldGhvZCB0byBjb3B5IGEgZGlyZWN0b3J5IHRvIHdpdGhpbiBhbm90aGVyIGRpcmVjdG9yeSBbMzYzMTVdCiAgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDEuMQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkluY29tcGF0aWJsZSBjaGFuZ2VzIGZyb20gMS4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcywgZXhjZXB0OgotIEZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZSgpCiAgICBBIG51bGwgZW5jb2RpbmcgcHJldmlvdXNseSB1c2VkICdJU08tODg1OS0xJywgbm93IGl0IHVzZXMgdGhlIHBsYXRmb3JtIGRlZmF1bHQKICAgIEdlbmVyYWxseSB0aGlzIHdpbGwgbWFrZSBubyBkaWZmZXJlbmNlCgotIExvY2thYmxlRmlsZVdyaXRlcgogICAgSW1wcm92ZWQgdmFsaWRhdGlvbiBhbmQgbm93IGNyZWF0ZSBkaXJlY3RvcmllcyBpZiBuZWNlc3NzYXJ5CgpwbHVzIHRoZXNlIGJ1ZyBmaXhlcyBtYXkgYWZmZWN0IHlvdSBzZW1hbnRpY2FsbHk6Ci0gRmlsZVV0aWxzLnRvdWNoKCkgIChCdWcgZml4IDI5ODIxKQogICAgTm93IGNyZWF0ZXMgdGhlIGZpbGUgaWYgaXQgZGlkIG5vdCBwcmV2aW91c2x5IGV4aXN0CgotIEZpbGVVdGlscy50b0ZpbGUoVVJMKSAoQnVnIGZpeCAzMjU3NSkKICAgIE5vdyBoYW5kbGVzIGVzY2FwZSBzeW50YXggc3VjaCBhcyAlMjAKCi0gRmlsZVV0aWxzLnNpemVPZkRpcmVjdG9yeSgpICAoQnVnIGZpeCAzNjgwMSkKICAgIE1heSBub3cgcmV0dXJuIGEgc2l6ZSBvZiAwIGlmIHRoZSBkaXJlY3RvcnkgaXMgc2VjdXJpdHkgcmVzdHJpY3RlZAoKRGVwcmVjYXRpb25zIGZyb20gMS4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIENvcHlVdGlscyBoYXMgYmVlbiBkZXByZWNhdGVkLgogICAgSXRzIG1ldGhvZHMgaGF2ZSBiZWVuIG1vdmVkIHRvIElPVXRpbHMuCiAgICBUaGUgbmV3IElPVXRpbHMgbWV0aG9kcyBoYW5kbGUgbnVsbHMgYmV0dGVyLCBhbmQgaGF2ZSBjbGVhcmVyIG5hbWVzLgoKLSBJT1V0aWxzLnRvQnl0ZUFycmF5KFN0cmluZykgLSBVc2Uge0BsaW5rIFN0cmluZyNnZXRCeXRlcygpfQotIElPVXRpbHMudG9TdHJpbmcoYnl0ZVtdKSAtIFVzZSB7QGxpbmsgU3RyaW5nI1N0cmluZyhieXRlW10pfQotIElPVXRpbHMudG9TdHJpbmcoYnl0ZVtdLFN0cmluZykgLSBVc2Uge0BsaW5rIFN0cmluZyNTdHJpbmcoYnl0ZVtdLFN0cmluZyl9CgpCdWcgZml4ZXMgZnJvbSAxLjAKLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZVV0aWxzIC0gdG91Y2goKSAgWzI5ODIxXQogICAgTm93IGNyZWF0ZXMgdGhlIGZpbGUgaWYgaXQgZGlkIG5vdCBwcmV2aW91c2x5IGV4aXN0CgotIEZpbGVVdGlscyAtIHRvRmlsZShVUkwpICBbMzI1NzVdCiAgICBOb3cgaGFuZGxlcyBlc2NhcGUgc3ludGF4IHN1Y2ggYXMgJTIwCgotIEZpbGVGaWx0ZXJVdGlscyAtIG1ha2VDVlNBd2FyZShJT0ZpbGVGaWx0ZXIpICBbMzMwMjNdCiAgICBGaXhlZCBidWcgdGhhdCBjYXVzZWQgbWV0aG9kIHRvIGJlIGNvbXBsZXRlbHkgYnJva2VuCgotIENvdW50aW5nSW5wdXRTdHJlYW0gIFszMzMzNl0KICAgIEZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgY291bnQgdG8gcmVkdWNlIGJ5IG9uZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0KCi0gQ291bnRpbmdJbnB1dFN0cmVhbSAtIHNraXAobG9uZykgIFszNDMxMV0KICAgIEJ5dGVzIGZyb20gY2FsbHMgdG8gdGhpcyBtZXRob2Qgd2VyZSBub3QgcHJldmlvdXNseSBjb3VudGVkCgotIE51bGxPdXRwdXRTdHJlYW0gIFszMzQ4MV0KICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBzeW5jaHJvbml6YXRpb24KCi0gQWJzdHJhY3RGaWxlRmlsdGVyIC0gYWNjZXB0KEZpbGUsIFN0cmluZykgIFszMDk5Ml0KICAgIEZpeGVkIGJyb2tlbiBpbXBsZW1lbnRhdGlvbgoKLSBGaWxlVXRpbHMgIFszNjgwMV0KICAgIFByZXZpb3VzbHkgdGhyZXcgTlBFIHdoZW4gbGlzdGluZyBmaWxlcyBpbiBhIHNlY3VyaXR5IHJlc3RyaWN0ZWQgZGlyZWN0b3J5CiAgICBOb3cgdGhyb3cgSU9FeGNlcHRpb24gd2l0aCBhIGJldHRlciBtZXNzYWdlCgotIEZpbGVVdGlscyAtIHdyaXRlU3RyaW5nVG9GaWxlKCkKICAgIE51bGwgZW5jb2Rpbmcgbm93IGNvcnJlY3RseSB1c2VzIHRoZSBwbGF0Zm9ybSBkZWZhdWx0CgpFbmhhbmNlbWVudHMgZnJvbSAxLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZW5hbWVVdGlscyAtIG5ldyBjbGFzcyAgWzMzMzAzLDI5MzUxXQogICAgQSBzdGF0aWMgdXRpbGl0eSBjbGFzcyBmb3Igd29ya2luZyB3aXRoIGZpbGVuYW1lcwogICAgU2Vla3MgdG8gZWFzZSB0aGUgcGFpbiBvZiBkZXZlbG9waW5nIG9uIFdpbmRvd3MgYW5kIGRlcGxveWluZyBvbiBVbml4CgotIEZpbGVTeXN0ZW1VdGlscyAtIG5ldyBjbGFzcyAgWzMyOTgyLDM2MzI1XQogICAgQSBzdGF0aWMgdXRpbGl0eSBjbGFzcyBmb3Igd29ya2luZyB3aXRoIGZpbGUgc3lzdGVtcwogICAgUHJvdmlkZXMgb25lIG1ldGhvZCBhdCBwcmVzZW50LCB0byBnZXQgdGhlIGZyZWUgc3BhY2Ugb24gdGhlIGZpbGluZyBzeXN0ZW0KCi0gSU9VdGlscyAtIG5ldyBwdWJsaWMgY29uc3RhbnRzCiAgICBDb25zdGFudHMgZm9yIGRpcmVjdG9yeSBhbmQgbGluZSBzZXBhcmF0b3JzIG9uIFdpbmRvd3MgYW5kIFVuaXgKCi0gSU9VdGlscyAtIHRvQnl0ZUFycmF5KFJlYWRlcixlbmNvZGluZykKICAgIEhhbmRsZXMgZW5jb2RpbmdzIHdoZW4gcmVhZGluZyB0byBhIGJ5dGUgYXJyYXkKCi0gSU9VdGlscyAtIHRvQ2hhckFycmF5KElucHV0U3RyZWFtKSAgWzI4OTc5XQogICAgICAgICAgLSB0b0NoYXJBcnJheShJbnB1dFN0cmVhbSxlbmNvZGluZykKICAgICAgICAgIC0gdG9DaGFyQXJyYXkoUmVhZGVyKQogICAgUmVhZHMgYSBzdHJlYW0vcmVhZGVyIGludG8gYSBjaGFyYXRjdGVyIGFycmF5CgotIElPVXRpbHMgLSByZWFkTGluZXMoSW5wdXRTdHJlYW0pICBbMzYyMTRdCiAgICAgICAgICAtIHJlYWRMaW5lcyhJbnB1dFN0cmVhbSxlbmNvZGluZykKICAgICAgICAgIC0gcmVhZExpbmVzKFJlYWRlcikKICAgIFJlYWRzIGEgc3RyZWFtL3JlYWRlciBsaW5lIGJ5IGxpbmUgaW50byBhIExpc3Qgb2YgU3RyaW5ncwoKLSBJT1V0aWxzIC0gdG9JbnB1dFN0cmVhbShTdHJpbmcpICBbMzI5NThdCiAgICAgICAgICAtIHRvSW5wdXRTdHJlYW0oU3RyaW5nLGVuY29kaW5nKQogICAgQ3JlYXRlcyBhbiBpbnB1dCBzdHJlYW0gdGhhdCB1c2VzIHRoZSBzdHJpbmcgYXMgYSBzb3VyY2Ugb2YgZGF0YQoKLSBJT1V0aWxzIC0gd3JpdGVMaW5lcyhDb2xsZWN0aW9uLGxpbmVFbmRpbmcsT3V0cHV0U3RyZWFtKSAgWzM2MjE0XQogICAgICAgICAgLSB3cml0ZUxpbmVzKENvbGxlY3Rpb24sbGluZUVuZGluZyxPdXRwdXRTdHJlYW0sZW5jb2RpbmcpCiAgICAgICAgICAtIHdyaXRlTGluZXMoQ29sbGVjdGlvbixsaW5lRW5kaW5nLFdyaXRlcikKICAgIFdyaXRlcyBhIGNvbGxlY3Rpb24gdG8gYSBzdHJlYW0vd3JpdGVyIGxpbmUgYnkgbGluZQoKLSBJT1V0aWxzIC0gd3JpdGUoLi4uKQogICAgV3JpdGUgZGF0YSB0byBhIHN0cmVhbS93cml0ZXIgKG1vdmVkIGZyb20gQ29weVV0aWxzIHdpdGggYmV0dGVyIG51bGwgaGFuZGxpbmcpCgotIElPVXRpbHMgLSBjb3B5KC4uLikKICAgIENvcHkgZGF0YSBiZXR3ZWVuIHN0cmVhbXMgKG1vdmVkIGZyb20gQ29weVV0aWxzIHdpdGggYmV0dGVyIG51bGwgaGFuZGxpbmcpCgotIElPVXRpbHMgLSBjb250ZW50RXF1YWxzKFJlYWRlcixSZWFkZXIpCiAgICBNZXRob2QgdG8gY29tcGFyZSB0aGUgY29udGVudHMgb2YgdHdvIHJlYWRlcnMKCi0gRmlsZVV0aWxzIC0gdG9GaWxlcyhVUkxbXSkKICAgIENvbnZlcnRzIGFuIGFycmF5IG9mIFVSTHMgdG8gYW4gYXJyYXkgb2YgRmlsZXMKCi0gRmlsZVV0aWxzIC0gY29weURpcmVjdG9yeSgpICBbMzI5NDRdCiAgICBOZXcgbWV0aG9kcyB0byBjb3B5IGEgZGlyZWN0b3J5CgotIEZpbGVVdGlscyAtIHJlYWRGaWxlVG9CeXRlQXJyYXkoRmlsZSkKICAgIFJlYWRzIGFuIGVudGlyZSBmaWxlIGludG8gYSBieXRlIGFycmF5CgotIEZpbGVVdGlscyAtIHdyaXRlQnl0ZUFycmF5VG9GaWxlKEZpbGUsYnl0ZVtdKQogICAgV3JpdGVzIGEgYnl0ZSBhcnJheSB0byBhIGZpbGUKCi0gRmlsZVV0aWxzIC0gcmVhZExpbmVzKEZpbGUsZW5jb2RpbmcpICBbMzYyMTRdCiAgICBSZWFkcyBhIGZpbGUgbGluZSBieSBsaW5lIGludG8gYSBMaXN0IG9mIFN0cmluZ3MKCi0gRmlsZVV0aWxzIC0gd3JpdGVMaW5lcyhGaWxlLGVuY29kaW5nLExpc3QpCiAgICAgICAgICAgICAgd3JpdGVMaW5lcyhGaWxlLGVuY29kaW5nLExpc3QsbGluZUVuZGluZykKICAgIFdyaXRlcyBhIGNvbGxlY3Rpb24gdG8gYSBmaWxlIGxpbmUgYnkgbGluZQoKLSBGaWxlVXRpbHMgLSBFTVBUWV9GSUxFX0FSUkFZCiAgICBDb25zdGFudCBmb3IgYW4gZW1wdHkgYXJyYXkgb2YgRmlsZSBvYmplY3RzCgotIENvbmRpdGlvbmFsRmlsZUZpbHRlciAtIG5ldyBpbnRlcmZhY2UgIFszMDcwNV0KICAgIERlZmluZXMgdGhlIGJlaGF2aW9yIG9mIGxpc3QgYmFzZWQgZmlsdGVycwoKLSBBbmRGaWxlRmlsdGVyLCBPckZpbGVGaWx0ZXIgIFszMDcwNV0KICAgIE5vdyBzdXBwb3J0IGEgbGlzdCBvZiBmaWx0ZXJzIHRvIGFuZC9vcgoKLSBXaWxkY2FyZEZpbHRlciAgWzMxMTE1XQogICAgTmV3IGZpbHRlciB0aGF0IGNhbiBtYXRjaCB1c2luZyB3aWxkY2FyZCBmaWxlIG5hbWVzCgotIEZpbGVGaWx0ZXJVdGlscyAtIG1ha2VTVk5Bd2FyZShJT0ZpbGVGaWx0ZXIpCiAgICBOZXcgbWV0aG9kLCBsaWtlIG1ha2VDVlNBd2FyZSwgdGhhdCBpZ25vcmVzIFN1YnZlcnNpb24gc291cmNlIGNvbnRyb2wgZGlyZWN0b3JpZXMKCi0gQ2xhc3NMb2FkZXJPYmplY3RJbnB1dFN0cmVhbQogICAgQW4gT2JqZWN0SW5wdXRTdHJlYW0gdGhhdCBzdXBwb3J0cyBhIENsYXNzTG9hZGVyCgotIENvdW50aW5nSW5wdXRTdHJlYW0sQ291bnRpbmdPdXRwdXRTdHJlYW0gLSByZXNldENvdW50KCkgIFsyODk3Nl0KICAgIEFkZHMgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGNvdW50IHBhcnQgd2F5IHRocm91Z2ggcmVhZGluZy93cml0aW5nIHRoZSBzdHJlYW0KCi0gRGVmZXJyZWRGaWxlT3V0cHV0U3RyZWFtIC0gd3JpdGVUbyhPdXRwdXRTdHJlYW0pICBbMzQxNzNdCiAgICBOZXcgbWV0aG9kIHRvIGFsbG93IGN1cnJlbnQgY29udGVudHMgdG8gYmUgd3JpdHRlbiB0byBhIHN0cmVhbQoKLSBEZWZlcnJlZEZpbGVPdXRwdXRTdHJlYW0gIFszNDE0Ml0KICAgIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgYXZvaWRpbmcgZG91YmxlIGJ1ZmZlcmluZwoKLSBMb2NrYWJsZUZpbGVXcml0ZXIgLSBlbmNvZGluZyBzdXBwb3J0IFszNjgyNV0KICAgIEFkZCBzdXBwb3J0IGZvciBjaGFyYWN0ZXIgZW5jb2RpbmdzIHRvIExvY2thYmxlRmlsZVdyaXRlcgogICAgSW1wcm92ZSB0aGUgdmFsaWRhdGlvbgogICAgQ3JlYXRlIGRpcmVjdG9yaWVzIGlmIG5lY2Vzc3NhcnkKCi0gSU9VdGlscyBhbmQgRW5kaWFuVXRpbHMgYXJlIG5vIGxvbmdlciBmaW5hbCAgWzI4OTc4XQogICAgQWxsb3dzIGRldmVsb3BlcnMgdG8gaGF2ZSBzdWJjbGFzc2VzIGlmIGRlc2lyZWQgICAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpGZWVkYmFjawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk9wZW4gc291cmNlIHdvcmtzIGJlc3Qgd2hlbiB5b3UgZ2l2ZSBmZWVkYmFjazoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvaW8vCgpQbGVhc2UgZGlyZWN0IGFsbCBidWcgcmVwb3J0cyB0byBKSVJBCmh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8KCk9yIHN1YnNjcmliZSB0byB0aGUgY29tbW9ucy11c2VyIG1haWxpbmcgbGlzdCAocHJlZml4IGVtYWlscyBieSBbaW9dKQpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9tYWlsLWxpc3RzLmh0bWwKClRoZSBDb21tb25zLUlPIFRlYW0K