Tm90ZQo9PT09CgpUaGlzIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgcGVvcGxlIHdobyBhcmUgcGVybWl0dGVkIHRvIG1ha2UKY2hhbmdlcyB0byB2YXJpb3VzIHBhcnRzIG9mIHRoZSBjb21waWxlciBhbmQgYXNzb2NpYXRlZCBsaWJyYXJpZXMuCgpQbGVhc2UgZG8gbm90IGNvbnRhY3QgdGhlIHBlb3BsZSBpbiB0aGlzIGZpbGUgZGlyZWN0bHkgdG8gcmVwb3J0CnByb2JsZW1zIGluIEdDQy4KCkZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IEdDQywgcGxlYXNlIHZpc2l0OgoKICBodHRwOi8vZ2NjLmdudS5vcmcKClRvIHJlcG9ydCBwcm9ibGVtcyBpbiBHQ0MsIHBsZWFzZSB2aXNpdDoKCiAgaHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbAoKTWFpbnRhaW5lcnMKPT09PT09PT09PT0KCgkJCUJsYW5rZXQgV3JpdGUgUHJpdnMuCgpSaWNoYXJkIEVhcm5zaGF3CQkJCXJpY2hhcmQuZWFybnNoYXdAYXJtLmNvbQpSaWNoYXJkIEhlbmRlcnNvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGhAcmVkaGF0LmNvbQpHZW9mZnJleSBLZWF0aW5nCQkJCWdlb2Zma0BnZW9mZmsub3JnClJpY2hhcmQgS2VubmVyCQkJCQlrZW5uZXJAbnl1LmVkdQpKZWZmIExhdwkJCQkJbGF3QHJlZGhhdC5jb20KTWljaGFlbCBNZWlzc25lcgkJCQlnbnVAdGhlLW1laXNzbmVycy5vcmcKSmFzb24gTWVycmlsbAkJCQkJamFzb25AcmVkaGF0LmNvbQpEYXZpZCBTLiBNaWxsZXIJCQkJCWRhdmVtQHJlZGhhdC5jb20KTWFyayBNaXRjaGVsbAkJCQkJbWFya0Bjb2Rlc291cmNlcnkuY29tCkJlcm5kIFNjaG1pZHQJCQkJCWJlcm5kLnNjaG1pZHRAYW5hbG9nLmNvbQpKaW0gV2lsc29uCQkJCQl3aWxzb25Ac3BlY2lmaXhpbmMuY29tCgoKCQkJQ1BVIFBvcnQgTWFpbnRhaW5lcnMJKENQVSBhbHBoYWJldGljYWwgb3JkZXIpCgphbHBoYSBwb3J0CQlSaWNoYXJkIEhlbmRlcnNvbglydGhAcmVkaGF0LmNvbQphcm0gcG9ydAkJTmljayBDbGlmdG9uCQluaWNrY0ByZWRoYXQuY29tCmFybSBwb3J0CQlSaWNoYXJkIEVhcm5zaGF3CXJpY2hhcmQuZWFybnNoYXdAYXJtLmNvbQphcm0gcG9ydAkJUGF1bCBCcm9vawkJcGF1bEBjb2Rlc291cmNlcnkuY29tCmF2ciBwb3J0CQlEZW5pcyBDaGVydHlrb3YJCWRlbmlzY0BvdmVydGEucnUKYXZyIHBvcnQJCU1hcmVrIE1pY2hhbGtpZXdpY3oJbWFyZWttQGFtZWxlay5nZGEucGwKYmZpbiBwb3J0CQlCZXJuZCBTY2htaWR0CQliZXJuZC5zY2htaWR0QGFuYWxvZy5jb20KYzR4IHBvcnQJCU1pY2hhZWwgSGF5ZXMJCW0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56CmNyaXMgcG9ydAkJSGFucy1QZXRlciBOaWxzc29uCWhwQGF4aXMuY29tCmNyeCBwb3J0CQlQYXVsIFdvZWdlcmVyCQlwYXVsLndvZWdlcmVyQG5zYy5jb20KZnIzMCBwb3J0CQlOaWNrIENsaWZ0b24JCW5pY2tjQHJlZGhhdC5jb20KZnJ2IHBvcnQJCUFsZHkgSGVybmFuZGV6CQlhbGR5aEByZWRoYXQuY29tCmZydiBwb3J0CQlBbGV4YW5kcmUgT2xpdmEJCWFvbGl2YUByZWRoYXQuY29tCmg4IHBvcnQJCQlKZWZmIExhdwkJbGF3QHJlZGhhdC5jb20KaDggcG9ydAkJCUthenUgSGlyYXRhCQlrYXp1QGNvZGVzb3VyY2VyeS5jb20KaHBwYSBwb3J0CQlKZWZmIExhdwkJbGF3QHJlZGhhdC5jb20KaHBwYSBwb3J0CQlEYXZlIEFuZ2xpbgkJZGF2ZS5hbmdsaW5AbnJjLmNhCmkzODYgcG9ydAkJUmljaGFyZCBIZW5kZXJzb24JcnRoQHJlZGhhdC5jb20KaWE2NCBwb3J0CQlKaW0gV2lsc29uCQl3aWxzb25Ac3BlY2lmaXhpbmMuY29tCmlxMjAwMCBwb3J0CQlOaWNrIENsaWZ0b24JCW5pY2tjQHJlZGhhdC5jb20KbTMyYyBwb3J0CQlESiBEZWxvcmllCQlkakByZWRoYXQuY29tCm0zMnIgcG9ydAkJTmljayBDbGlmdG9uCQluaWNrY0ByZWRoYXQuY29tCm02OGhjMTEgcG9ydAkJU3RlcGhhbmUgQ2FycmV6CQlzdGNhcnJlekBuZXJpbS5mcgptNjhrIHBvcnQgKD8pCQlKZWZmIExhdwkJbGF3QHJlZGhhdC5jb20KbTY4ayBwb3J0CQlBbmRyZWFzIFNjaHdhYgkJc2Nod2FiQHN1c2UuZGUKbTY4ay1tb3Rvcm9sYS1zeXN2IHBvcnQJUGhpbGlwcGUgRGUgTXV5dGVyCXBoZG1AbWFjcWVsLmJlCm1jb3JlIHBvcnQJCU5pY2sgQ2xpZnRvbgkJbmlja2NAcmVkaGF0LmNvbQptaXBzIHBvcnQgICAgICAgICAgICAgICBFcmljIENocmlzdG9waGVyICAgICAgICBlY2hyaXN0b0BhcHBsZS5jb20KbWlwcyBwb3J0CQlSaWNoYXJkIFNhbmRpZm9yZAlyaWNoYXJkQGNvZGVzb3VyY2VyeS5jb20KbW1peCBwb3J0CQlIYW5zLVBldGVyIE5pbHNzb24JaHBAYml0cmFuZ2UuY29tCm1uMTAzMDAgcG9ydAkJSmVmZiBMYXcJCWxhd0ByZWRoYXQuY29tCm1uMTAzMDAgcG9ydAkJQWxleGFuZHJlIE9saXZhCQlhb2xpdmFAcmVkaGF0LmNvbQptczEgcG9ydAkJQWxkeSBIZXJuYW5kZXoJCWFsZHloQHJlZGhhdC5jb20KcGRwMTEgcG9ydAkJUGF1bCBLb25pbmcJCW5pMWRAYXJybC5uZXQKcnM2MDAwIHBvcnQJCUdlb2ZmIEtlYXRpbmcJCWdlb2Zma0BnZW9mZmsub3JnCnJzNjAwMCBwb3J0CQlEYXZpZCBFZGVsc29obgkJZGplQHdhdHNvbi5pYm0uY29tCnJzNjAwMCB2ZWN0b3IgZXh0bnMJQWxkeSBIZXJuYW5kZXoJCWFsZHloQHJlZGhhdC5jb20KczM5MCBwb3J0CQlIYXJ0bXV0IFBlbm5lcgkJaHBlbm5lckBkZS5pYm0uY29tCnMzOTAgcG9ydAkJVWxyaWNoIFdlaWdhbmQJCXV3ZWlnYW5kQGRlLmlibS5jb20Kc2ggcG9ydAkJCUpvZXJuIFJlbm5lY2tlCQlqb2Vybi5yZW5uZWNrZUBzdC5jb20Kc2ggcG9ydAkJCUFsZXhhbmRyZSBPbGl2YQkJYW9saXZhQHJlZGhhdC5jb20Kc2ggbGlicmFyaWVzL2NvbmZpZ3VyeQlLYXogS29qaW1hCQlra29qaW1hQGdjYy5nbnUub3JnCnNwYXJjIHBvcnQJCVJpY2hhcmQgSGVuZGVyc29uCXJ0aEByZWRoYXQuY29tCnNwYXJjIHBvcnQJCURhdmlkIFMuIE1pbGxlcgkJZGF2ZW1AcmVkaGF0LmNvbQpzcGFyYyBwb3J0CQlKYWt1YiBKZWxpbmVrCQlqYWt1YkByZWRoYXQuY29tCnNwYXJjIHBvcnQJCUVyaWMgQm90Y2F6b3UJCWVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcgp2ODUwIHBvcnQJCU5pY2sgQ2xpZnRvbgkJbmlja2NAcmVkaGF0LmNvbQp2YXggcG9ydAkJRGF2ZSBBbmdsaW4JCWRhdmUuYW5nbGluQG5yYy5jYQp2YXggcG9ydAkJTWF0dCBUaG9tYXMJCW1hdHRAM2FtLXNvZnR3YXJlLmNvbQp4ODYtNjQgcG9ydAkJSmFuIEh1Ymlja2EJCWpoQHN1c2UuY3oKeHN0b3JteTE2IHBvcnQJCUdlb2ZmcmV5IEtlYXRpbmcJZ2VvZmZrQGdlb2Zmay5vcmcKeHRlbnNhIHBvcnQJCUJvYiBXaWxzb24JCWJvYi53aWxzb25AYWNtLm9yZwoKCQkJT1MgUG9ydCBNYWludGFpbmVycwkoT1MgYWxwaGFiZXRpY2FsIG9yZGVyKQoKZGFyd2luIHBvcnQJCURhbGUgSm9oYW5uZXNlbgkJZGFsZWpAYXBwbGUuY29tCmRhcndpbiBwb3J0CQlNaWtlIFN0dW1wCQltcnNAYXBwbGUuY29tCmRhcndpbiBwb3J0CQlTdGFuIFNoZWJzCQlzaGVic0BhcHBsZS5jb20KREpHUFAJCQlESiBEZWxvcmllCQlkakBkZWxvcmllLmNvbQpmcmVlYnNkCQkJTG9yZW4gSi4gUml0dGxlCQlsanJpdHRsZUBhY20ub3JnCmlyaXgsIG9zZgkJUmFpbmVyIE9ydGgJCXJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERQpuZXRic2QJCQlKYXNvbiBUaG9ycGUJCXRob3JwZWpAbmV0YnNkLm9yZwpzY281LCB1bml4d2FyZSwgc2NvIHVkawlLZWFuIEpvaG5zdG9uCQlqa2pAc2NvLmNvbQpzaC1saW51eC1nbnUJCUtheiBLb2ppbWEJCWtrb2ppbWFAZ2NjLmdudS5vcmcKUlRFTVMgUG9ydHMJCUpvZWwgU2hlcnJpbGwJCWpvZWxAb2FyY29ycC5jb20KUlRFTVMgUG9ydHMJCVJhbGYgQ29yc2VwaXVzCQlyYWxmLmNvcnNlcGl1c0BydGVtcy5vcmcKVnhXb3JrcyBwb3J0cwkJTmF0aGFuIFNpZHdlbGwJCW5hdGhhbkBjb2Rlc291cmNlcnkuY29tCndpbmRvd3MsIGN5Z3dpbiwgbWluZ3cJQ2hyaXN0b3BoZXIgRmF5bG9yCWNnZkBnY2MuZ251Lm9yZwp3aW5kb3dzLCBjeWd3aW4sIG1pbmd3CURhbm55IFNtaXRoCQlkYW5ueXNtaXRoQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAoKCQkJTGFuZ3VhZ2UgRnJvbnQgRW5kcyBNYWludGFpbmVycwoKQyBmcm9udCBlbmQvSVNPIEM5OQlKb3NlcGggTXllcnMJCWpzbUBwb2x5b21pbm8ub3JnLnVrCkMgZnJvbnQgZW5kL0lTTyBDOTkJUmljaGFyZCBIZW5kZXJzb24JcnRoQHJlZGhhdC5jb20KQWRhIGZyb250IGVuZAkJR2VlcnQgQm9zY2gJCWJvc2NoQGduYXQuY29tCkFkYSBmcm9udCBlbmQJCVJvYmVydCBEZXdhcgkJZGV3YXJAZ25hdC5jb20KQWRhIGZyb250IGVuZAkJQXJuYXVkIENoYXJsZXQJCWNoYXJsZXRAYWN0LWV1cm9wZS5mcgpmb3J0cmFuIDk1CQlQYXVsIEJyb29rCQlwYXVsQGNvZGVzb3VyY2VyeS5jb20KZm9ydHJhbiA5NQkJU3RldmVuIEJvc3NjaGVyCQlzdGV2ZW5iQHN1c2UuZGUKZm9ydHJhbiA5NQkJVGhvbWFzIEtvZW5pZwkJVGhvbWFzLktvZW5pZ0BvbmxpbmUuZGUKZm9ydHJhbiA5NQkJVG9vbiBNb2VuZQkJdG9vbkBtb2VuZS5pbmRpdi5ubHV1Zy5ubApmb3J0cmFuIDk1CQlQYXVsIFRob21hcwkJcGF1bHRAZ2NjLmdudS5vcmcKZm9ydHJhbiA5NQkJSmFubmUgQmxvbXF2aXN0CQlqYkBnY2MuZ251Lm9yZwpjKysJCQlKYXNvbiBNZXJyaWxsCQlqYXNvbkByZWRoYXQuY29tCmMrKyAgICAgICAgICAgICAgICAgICAgIE1hcmsgTWl0Y2hlbGwJCW1hcmtAY29kZXNvdXJjZXJ5LmNvbQpjKysJCQlOYXRoYW4gU2lkd2VsbAkJbmF0aGFuQGNvZGVzb3VyY2VyeS5jb20KamF2YQkJCVBlciBCb3RobmVyCQlwZXJAYm90aG5lci5jb20KamF2YQkJCUFuZHJldyBIYWxleQkJYXBoQHJlZGhhdC5jb20KamF2YQkJCVRvbSBUcm9tZXkJCXRyb21leUByZWRoYXQuY29tCm1lcmN1cnkJCQlGZXJndXMgSGVuZGVyc29uCWZqaEBjcy5tdS5vei5hdQpvYmplY3RpdmUtYwkJU3RhbiBTaGVicwkJc2hlYnNAYXBwbGUuY29tCm9iamVjdGl2ZS1jCQlPdmlkaXUgUHJlZGVzY3UJCW92aWRpdUBjdXAuaHAuY29tCm9iamVjdGl2ZS1jL2MrKwkJWmllbW93aXQgTGFza2kJCXpsYXNraUBhcHBsZS5jb20Kb2JqZWN0aXZlLWMvYysrCQlNaWtlIFN0dW1wCQltcnNAYXBwbGUuY29tCnRyZWVsYW5nICAgICAgICAgICAgICAgIFRpbSBKb3NsaW5nICAgICAgICAgICAgIHRlakBtZWxicGMub3JnLmF1CnRyZWVsYW5nICAgICAgICAgICAgICAgIEphbWVzIEEuIE1vcnJpc29uCXBoeXRob25AZ2NjLmdudS5vcmcKCgkJCVZhcmlvdXMgTWFpbnRhaW5lcnMKCmNwcGxpYgkJCVBlciBCb3RobmVyCQlwZXJAYm90aG5lci5jb20KbGliZ2NqCQkJVG9tIFRyb21leQkJdHJvbWV5QHJlZGhhdC5jb20KbGliZ2NqCQkJQnJ5Y2UgTWNLaW5sYXkJCWJyeWNlQGdjYy5nbnUub3JnCmxpYm9iamMJCQlOaWNvbGEgUGVybwkJbi5wZXJvQG1pLmZsYXNobmV0Lml0CmxpYm9iamMJCQlBbmRyZXcgUGluc2tpCQlwaW5za2lhQHBoeXNpY3MudWMuZWR1Cmxvb3AgZGlzY292ZXJ5CQlNaWNoYWVsIEhheWVzCQltLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uegpzY2hlZHVsZXIgKCsgaGFpZmEpCUppbSBXaWxzb24JCXdpbHNvbkBzcGVjaWZpeGluYy5jb20Kc2NoZWR1bGVyICgrIGhhaWZhKQlNaWNoYWVsIE1laXNzbmVyCWdudUB0aGUtbWVpc3NuZXJzLm9yZwpzY2hlZHVsZXIgKCsgaGFpZmEpCUplZmYgTGF3CQlsYXdAcmVkaGF0LmNvbQpzY2hlZHVsZXIgKCsgaGFpZmEpCVZsYWRpbWlyIE1ha2Fyb3YJdm1ha2Fyb3ZAcmVkaGF0LmNvbQpyZW9yZwkJCUplZmYgTGF3CQlsYXdAcmVkaGF0LmNvbQpjYWxsZXItc2F2ZS5jCQlKZWZmIExhdwkJbGF3QHJlZGhhdC5jb20KY2FsbGdyYXBoCQlKYW4gSHViaWNrYQkJamhAc3VzZS5jegpkZWJ1Z2dpbmcgY29kZQkJSmltIFdpbHNvbgkJd2lsc29uQHNwZWNpZml4aW5jLmNvbQpkd2FyZiBkZWJ1Z2dpbmcgY29kZQlKYXNvbiBNZXJyaWxsCQlqYXNvbkByZWRoYXQuY29tCmMrKyBydW50aW1lIGxpYnMJUGFvbG8gQ2FybGluaQkJcGNhcmxpbmlAc3VzZS5kZQpjKysgcnVudGltZSBsaWJzICAgICAgICBHYWJyaWVsIERvcyBSZWlzICAgICAgICBnZHJAaW50ZWdyYWJsZS1zb2x1dGlvbnMubmV0CmMrKyBydW50aW1lIGxpYnMJVWxyaWNoIERyZXBwZXIJCWRyZXBwZXJAcmVkaGF0LmNvbQpjKysgcnVudGltZSBsaWJzCVBoaWwgRWR3YXJkcwkJcG1lQGdjYy5nbnUub3JnCmMrKyBydW50aW1lIGxpYnMJQmVuamFtaW4gS29zbmlrCQlia296QHJlZGhhdC5jb20KYysrIHJ1bnRpbWUgbGlicwlMb3JlbiBKLiBSaXR0bGUJCWxqcml0dGxlQGFjbS5vcmcKKnN5bnRoZXRpYyBtdWx0aXBseQlUb3Jiam9ybiBHcmFubHVuZAl0ZWdlQHN3b3guY29tCipjLXRvcnR1cmUJCVRvcmJqb3JuIEdyYW5sdW5kCXRlZ2VAc3dveC5jb20KZml4aW5jbHVkZXMJCUJydWNlIEtvcmIJCWJrb3JiQGdudS5vcmcKZ2NzZS5jIAkJCUplZmYgTGF3CQlsYXdAcmVkaGF0LmNvbQpnbG9iYWwgb3B0IGZyYW1ld29yawlKZWZmIExhdwkJbGF3QHJlZGhhdC5jb20KanVtcC5jCQkJRGF2aWQgUy4gTWlsbGVyCQlkYXZlbUByZWRoYXQuY29tCndlYiBwYWdlcwkJR2VyYWxkIFBmZWlmZXIJCWdlcmFsZEBwZmVpZmVyLmNvbQpidWlsZCBzdGF0dXMgbGlzdHMJSmFuaXMgSm9obnNvbgkJamFuaXMxODdAdXMuaWJtLmNvbQpjb25maWcuc3ViL2NvbmZpZy5ndWVzcwlCZW4gRWxsaXN0b24JCWNvbmZpZy1wYXRjaGVzQGdudS5vcmcKYmFzaWMgYmxvY2sgcmVvcmRlcmluZwlKYXNvbiBFY2toYXJkdAkJamxlQHJpY2UuZWR1CmkxOG4JCQlQaGlsaXBwIFRob21hcwkJcHRob21hc0BzdXNlLmRlCmkxOG4JCQlKb3NlcGggTXllcnMJCWpzbUBwb2x5b21pbm8ub3JnLnVrCmRpYWdub3N0aWMgbWVzc2FnZXMJR2FicmllbCBEb3MgUmVpcwlnZHJAaW50ZWdyYWJsZS1zb2x1dGlvbnMubmV0CmxpYmliZXJ0eQkJREogRGVsb3JpZQkJZGpAcmVkaGF0LmNvbQpsaWJpYmVydHkJCUlhbiBMYW5jZSBUYXlsb3IJaWFuQGFpcnMuY29tCmJ1aWxkIG1hY2hpbmVyeSAoKi5pbikJREogRGVsb3JpZQkJZGpAcmVkaGF0LmNvbQpidWlsZCBtYWNoaW5lcnkgKCouaW4pCU5hdGhhbmFlbCBOZXJvZGUJbmVyb2RlbkBnY2MuZ251Lm9yZwpidWlsZCBtYWNoaW5lcnkgKCouaW4pCUFsZXhhbmRyZSBPbGl2YQkJYW9saXZhQHJlZGhhdC5jb20KZG9jcyBjby1tYWludGFpbmVyCUdlcmFsZCBQZmVpZmVyCQlnZXJhbGRAcGZlaWZlci5jb20KZG9jcyBjby1tYWludGFpbmVyCUpvc2VwaCBNeWVycwkJanNtQHBvbHlvbWluby5vcmcudWsKcHJlZGljdC5kZWYJCUphbiBIdWJpY2thCQlqaEBzdXNlLmN6CmNvbnRyaWIvcmVncmVzc2lvbglHZW9mZiBLZWF0aW5nCQlnZW9mZmtAZ2VvZmZrLm9yZwpnY292CQkJSmFuIEh1Ymlja2EJCWpoQHN1c2UuY3oKZ2NvdgkJCU5hdGhhbiBTaWR3ZWxsCQluYXRoYW5AY29kZXNvdXJjZXJ5LmNvbQpvcHRpb24gaGFuZGxpbmcJCU5laWwgQm9vdGgJCW5laWxAZGFpa29rdXlhLmNvLnVrCmxpYmZmaSB0ZXN0c3VpdGUJQW5kcmVhcyBUb2JsZXIJCWFuZHJlYXN0QGdjYy5nbnUub3JnCnRlc3RzdWl0ZQkJSmFuaXMgSm9obnNvbgkJamFuaXMxODdAdXMuaWJtLmNvbQptaWRkbGUtZW5kCQlSb2dlciBTYXlsZQkJcm9nZXJAZXllc29wZW4uY29tCm1pZGRsZS1lbmQJCUlhbiBMYW5jZSBUYXlsb3IJaWFuQGFpcnMuY29tCnRyZWUtc3NhCQlEaWVnbyBOb3ZpbGxvCQlkbm92aWxsb0ByZWRoYXQuY29tCnRyZWUtc3NhCQlBbmRyZXcgTWFjTGVvZAkJYW1hY2xlb2RAcmVkaGF0LmNvbQpQUkUJCQlEYW5pZWwgQmVybGluCQlkYmVybGluQGRiZXJsaW4ub3JnCmNvZGUgc2lua2luZwkJRGFuaWVsIEJlcmxpbgkJZGJlcmxpbkBkYmVybGluLm9yZwptdWRmbGFwCQkJRnJhbmsgQ2guIEVpZ2xlcglmY2hlQHJlZGhhdC5jb20KdHJlZSBicm93c2VyL3VucGFyc2VyCVNlYmFzdGlhbiBQb3AJCXBvcEBjcmkuZW5zbXAuZnIKc2NldiwgZGF0YSBkZXBlbmRlbmNlICAgRGFuaWVsIEJlcmxpbgkJZGJlcmxpbkBkYmVybGluLm9yZwpzY2V2LCBkYXRhIGRlcGVuZGVuY2UJU2ViYXN0aWFuIFBvcAkJcG9wQGNyaS5lbnNtcC5mcgpsaW5lYXIgbG9vcCB0cmFuc2Zvcm1zCURhbmllbCBCZXJsaW4JCWRiZXJsaW5AZGJlcmxpbi5vcmcKcHJvZmlsZSBmZWVkYmFjawlKYW4gSHViaWNrYQkJamhAc3VzZS5jegp0eXBlLXNhZmUgdmVjdG9ycwlOYXRoYW4gU2lkd2VsbAkJbmF0aGFuQGNvZGVzb3VyY2VyeS5jb20KYWxpYXMgYW5hbHlzaXMJCURhbmllbCBCZXJsaW4JCWRiZXJsaW5AZGJlcmxpbi5vcmcKYWxpYXMgYW5hbHlzaXMJCURpZWdvIE5vdmlsbG8JCWRub3ZpbGxvQHJlZGhhdC5jb20KCk5vdGUgaW5kaXZpZHVhbHMgd2hvIG1haW50YWluIHBhcnRzIG9mIHRoZSBjb21waWxlciBuZWVkIGFwcHJvdmFsIHRvIGNoZWNrCmluIGNoYW5nZXMgb3V0c2lkZSBvZiB0aGUgcGFydHMgb2YgdGhlIGNvbXBpbGVyIHRoZXkgbWFpbnRhaW4uCgoKCQkJV3JpdGUgQWZ0ZXIgQXBwcm92YWwJKGxhc3QgbmFtZSBhbHBoYWJldGljYWwgb3JkZXIpCgpNYXJrIEcuIEFkYW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrLmcuYWRhbXNAc3ltcGF0aWNvLmNhCk1hdHQgQXVzdGVybiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1c3Rlcm5AYXBwbGUuY29tCkRhdmlkIEF5ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuYXllcnNAaW5vZGUuYXQKR2lvdmFubmkgQmFqbwkJCQkJZ2lvdmFubmliYWpvQGdjYy5nbnUub3JnClNjb3R0IEJhbWJyb3VnaAkJCQkJc2NvdHRiQG5ldHdpbmRlci5vcmcKV29sZmdhbmcgQmFuZ2VydGgJCQkJYmFuZ2VydGhAZGVhbGlpLm9yZwpEYXZpZCBCaWxsaW5naHVyc3QJCQkJRGF2aWQuQmlsbGluZ2h1cnN0QHJpb3RpbnRvLmNvbQpMYXVyeW5hcyBCaXZlaW5pcwkJCSAgICAgICAgbGF1cnluYXMuYml2ZWluaXNAbWlmLnZ1Lmx0ClVyb3MgQml6amFrCQkJCQl1cm9zQGtzcy1sb2thLnNpCkVyaWMgQmxha2UJCQkJCWVyaWNiQGdjYy5nbnUub3JnCkppbSBCbGFuZHkJCQkJCWppbWJAcmVkaGF0LmNvbQpQaGlsIEJsdW5kZWxsCQkJCQlwYkBmdXR1cmV0di5jb20KSGFucyBCb2VobQkJCQkJaGJvZWhtQGdjYy5nbnUub3JnClNlZ2hlciBCb2Vzc2Vua29vbAkJCQlzZWdoZXJAa2VybmVsLmNyYXNoaW5nLm9yZwpQYW9sbyBCb256aW5pCQkJCQlib256aW5pQGdudS5vcmcKTmVpbCBCb290aAkJCQkJbmVpbEBkYWlrb2t1eWEuY28udWsKUm9iZXJ0IEJvd2RpZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm93ZGlkZ2VAYXBwbGUuY29tCkpvZWwgQnJvYmVja2VyCQkJCQlicm9iZWNrZXJAZ25hdC5jb20KRGF2ZSBCcm9sbGV5CQkJCQlicm9sbGV5QHJlZGhhdC5jb20KS2V2aW4gQnVldHRuZXIJCQkJCWtldmluYkByZWRoYXQuY29tCkFuZHJldyBDYWduZXkJCQkJCWNhZ25leUByZWRoYXQuY29tCkpvaG4gQ2FycgkJCQkJamZjQG1pdC5lZHUKU3RldmUgQ2hhbWJlcmxhaW4JCQkJc2FjQHRyYW5zbWV0YS5jb20KTWljaGFlbCBDaGFzdGFpbgkJCQltZWMuZ251QG1pbmRzcHJpbmcuY29tCkNoYW5kcmEgQ2hhdnZhCQkJCQljY2hhdnZhQHJlZGhhdC5jb20KV2lsbGlhbSBDb2hlbgkJCQkJd2NvaGVuQHJlZGhhdC5jb20KSm9zaCBDb25uZXIJCQkJCWpjb25uZXJAYXBwbGUuY29tClIuIEtlbGxleSBDb29rCQkJCQlrY29va0BnY2MuZ251Lm9yZwpDaHJpc3RpYW4gQ29ybmVsc3NlbgkJCQljY29ybkBjcy50dS1iZXJsaW4uZGUKRnJhbudvaXMtWGF2aWVyIENvdWRlcnQJCQkJY291ZGVydEBjbGlwcGVyLmVucy5mcgpJYW4gRGFsbAkJCQkJaWFuQGJld2FyZS5kcm9wYmVhci5pZC5hdQpEYXZpZCBEYW5leQkJCQkJZGRhbmV5QGF2dHJleC5jb20KQnVkIERhdmlzCQkJCQliZGF2aXM5NjU5QGNvbWNhc3QubmV0CkplcnJ5IERlTGlzbGUJCQkJCWp2ZGVsaXNsZUB2ZXJpem9uLm5ldApaZGVuZWsgRHZvcmFrCQkJCQlkdm9yYWt6QHN1c2UuY3oKRXJpayBFZGVsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJpay5lZGVsbWFubkBpa2kuZmkKU3RldmUgRWxsY2V5CQkJCQlzamVAY3VwLmhwLmNvbQpNb2hhbiBFbWJhcgkJCQkJZ251c3R1ZmZAdGhpc2lzY29vbC5jb20KTWFyYyBFc3BpZQkJCQkJZXNwaWVAY3ZzLm9wZW5ic2Qub3JnCkFuc2dhciBFc3p0ZXJtYW5uCQkJCWFuc2dhckB0aHBoeS51bmktZHVlc3NlbGRvcmYuZGUKRG91ZyBFdmFucwkJCQkJZGplQHRyYW5zbWV0YS5jb20KQmVybmhhcmQgRmlzY2hlcgkJCQlyZXAubm9wQGFvbi5hdApUaG9tYXMgRml0enNpbW1vbnMJCQkJZml0enNpbUByZWRoYXQuY29tCkJyaWFuIEZvcmQJCQkJCWZvcmRAdnNzLmZzaS5jb20KS2F2ZWggR2hhemkJCQkJCWdoYXppQGNhaXAucnV0Z2Vycy5lZHUKTWF0dGhldyBHaW5nZWxsCQkJCQlnaW5nZWxsQGduYXQuY29tCkFudGhvbnkgR3JlZW4JCQkJCWdyZWVuQHJlZGhhdC5jb20KRG91ZyBHcmVnb3IJCQkJCWRvdWcuZ3JlZ29yQGdtYWlsLmNvbQpKb24gR3JpbW0JCQkJCWpncmltbTJAdXMuaWJtLmNvbQpSaWNoYXJkIEd1ZW50aGVyCQkJCXJndWVudGhlckBzdXNlLmRlCkxhdXJlbnQgR3VlcmJ5CQkJCQlsYXVyZW50QGd1ZXJieS5uZXQKTW9zdGFmYSBIYWdvZwkJCQkJaGFnb2dAZ2NjLmdudS5vcmcKT2xpdmllciBIYWlucXVlCQkJCQloYWlucXVlQGFjdC1ldXJvcGUuZnIKU3R1YXJ0IEhhc3RpbmdzCQkJCQlzdHVhcnRAYXBwbGUuY29tCk1hdHRoZXcgSGlsbGVyCQkJCQloaWxsZXJAcmVkaGF0LmNvbQpNYW5mcmVkIEhvbGxzdGVpbgkJCQltaEBzdXNlLmNvbQpGYWxrIEh1ZWZmbmVyCQkJCQlmYWxrQGRlYmlhbi5vcmcKQmVybmFyZG8gSW5ub2NlbnRpCQkJCWJlcm5pZUBkZXZlbGVyLmNvbQpEYW5pZWwgSmFjb2Jvd2l0egkJCQlkYW5AZGViaWFuLm9yZwpBbmRyZWFzIEphZWdlcgkJCQkJYWpAc3VzZS5kZQpGYXJpYm9yeiBKYWhhbmlhbgkJCQlmamFoYW5pYW5AYXBwbGUuY29tCktsYXVzIEthZW1wZgkJCQkJa2thZW1wZkBwcm9naXMuZGUKU3RldmUgS2FyZ2wJCQkJCXNna0B0cm91dG1hc2suYXBsLndhc2hpbmd0b24uZWR1CkJyZW5kYW4gS2Vob2UJCQkJCWJyZW5kYW5AemVuLm9yZwpNdW1pdCBLaGFuCQkJCQlraGFuQHhyYXlsaXRoLndpc2MuZWR1Ck1hdHRoaWFzIEtsb3NlCQkJCQlkb2tvQGRlYmlhbi5vcmcKSmVmZiBLbmFnZ3MJCQkJCWprbmFnZ3NAcmVkaGF0LmNvbQpNaWNoYWVsIEtvY2gJCQkJCWtvbnF1ZXJvckBnbXguZGUKTWF0dCBLcmFhaQkJCQkJa3JhYWlAZnRiZnMub3JnCkFuZHJlYXMgS3JlYmJlbAkJCQkJa3JlYmJlbDFAZGUuaWJtLmNvbQpTY290dCBSb2JlcnQgTGFkZAkJCQlzY290dC5sYWRkQGNveW90ZWd1bGNoLmNvbQpSYXp5YSBMYWRlbHNreQkJCQkJcmF6eWFAZ2NjLmdudS5vcmcKQWFyb24gVy4gTGFGcmFtYm9pc2UJCQkJYWFyb25hdmF5NjJAYWFyb253bC5jb20KVGVycnkgTGF1cmVuem8JCQkJCXRsYXVyZW56b0BnbWFpbC5jb20KTWFyYyBMZWhtYW5uCQkJCQlwY2dAZ29vZi5jb20KQWxhbiBMZWhvdHNreQkJCQkJYXBsQGFsdW0ubWl0LmVkdQpKYW1lcyBMZW1rZQkJCQkJamltQHdhc2FiaXN5c3RlbXMuY29tCktyaWFuZyBMZXJkc3V3YW5ha2lqCQkJCWxlcmRzdXdhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldApXYXJyZW4gTGV2eQkJCQkJd2FycmVubEBjcnV6aW8uY29tCkRvbiBMaW5kc2F5CQkJCQlkbGluZHNheUByZWRoYXQuY29tClJhbHBoIExvYWRlcgkJCQkJcmNsQGlodWcuY28ubnoKR2Fib3IgTG9raQkJCQkJbG9raUBpbmYudS1zemVnZWQuaHUKRGF2ZSBMb3ZlCQkJCQlkLmxvdmVAZGwuYWMudWsKTWFydGluIHYuIEz2d2lzCQkJCQlsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGUKSEogTHUJCQkJCQloamxAbHVjb24ub3JnClppZ2EgTWFoa292ZWMJCQkJCXppZ2EubWFoa292ZWNAa2xpa2Euc2kKUmFuaml0IE1hdGhldwkJCQkJcm1hdGhld0Bob3RtYWlsLmNvbQpNaWNoYWVsIE1hdHoJCQkJCW1hdHpAc3VzZS5kZQpHcmVnIE1jR2FyeQkJCQkJZ2ttQGdudS5vcmcKQWRhbSBNZWdhY3oJCQkJCWFkYW1AeHd0Lm9yZwpBbGFuIE1vZHJhCQkJCQlhbW9kcmFAYmlncG9uZC5uZXQuYXUKQ2F0aGVyaW5lIE1vb3JlCQkJCQljbG1AcmVkaGF0LmNvbQpEb3JpdCBOYWlzaGxvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3JpdEBpbC5pYm0uY29tCkFkYW0gTmVtZXQJCQkJCWFuZW1ldEBsbnh3LmNvbQpEYW4gTmljb2xhZXNjdQkJCQkJZGFubkBpY3MudWNpLmVkdQpEYXZpZCBPJ0JyaWVuCQkJCQlvYnJpZW5ARnJlZUJTRC5vcmcKVHVybHkgTydDb25ub3IJCQkJCXR1cmx5QGFwcGxlLmNvbQpKZWZmcmV5IEQuIE9sZGhhbQkJCQlvbGRoYW1AY29kZXNvdXJjZXJ5LmNvbQpEZXZhbmcgUGF0ZWwJCQkJCWRwYXRlbEBhcHBsZS5jb20KR3JhZW1lIFBldGVyc29uCQkJCQlncEBxbnguY29tCkFsZXhhbmRyZSBQZXRpdC1CaWFuY28JCQkJYXBiaWFuY29AcmVkaGF0LmNvbQpOaWNvbGFzIFBpdHJlCQkJCQluaWNvQGNhbS5vcmcKQ2xpbnRvbiBQb3BldHoJCQkJCWNwb3BldHpAY3BvcGV0ei5jb20KSmVycnkgUXVpbm4JCQkJCWpscXVpbm5Ab3B0b25saW5lLm5ldApSb2xmIFJhc211c3NlbgkJCQkJcm9sZndyQGdjYy5nbnUub3JnClZvbGtlciBSZWljaGVsdAkJCQkJcmVpY2hlbHRAaWdwbS5yd3RoLWFhY2hlbi5kZQpUb20gUml4CQkJCQkJdHJpeEByZWRoYXQuY29tCkNyYWlnIFJvZHJpZ3VlcwkJCQkJcm9kcmlnY0BnY2MuZ251Lm9yZwpHYXZpbiBSb21pZy1Lb2NoCQkJCWdhdmluQHJlZGhhdC5jb20KSXJhIFJvc2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJhckBpbC5pYm0uY29tCk1hY2llaiBXLiBSb3p5Y2tpCQkJCW1hY3JvQGxpbnV4LW1pcHMub3JnCklyYSBSdWJlbgkJCQkJaXJhQGFwcGxlLmNvbQpEb3VnbGFzIFJ1cHAJCQkJCXJ1cHBAZ25hdC5jb20KTWF0dGhldyBTYWNocwkJCQkJbXNhY2hzQGFwcGxlLmNvbQpBbGV4IFNhbXVlbAkJCQkJc2FtdWVsQGNvZGVzb3VyY2VyeS5jb20KVG9iaWFzIFNjaGz8dGVyCQkJCQl0b2JpYXMuc2NobHVldGVyQHBoeXNpay51bmktbXVlbmNoZW4uZGUKU3ZlaW4gU2VsZGFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZlaW5AZGV2LnNlbGRhbC5jb20KVGhpZW1vIFNldWZlcgkJCQkJdGhzQG5ldHdvcmtuby5kZQpGcmFueiBTaXJsCQkJCQlmcmFuei5zaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbQpNaWNoYWVsIFNva29sb3YJCQkJCW1zb2tvbG92QGl2YW4uSGFyaGFuLk9SRwpSaWNoYXJkIFN0YWxsbWFuCQkJCXJtc0BnbnUub3JnCkdyYWhhbSBTdG90dAkJCQkJZ3JhaGFtLnN0b3R0QGJ0aW50ZXJuZXQuY29tCk1pa2UgU3R1bXAJCQkJCW1yc0BhcHBsZS5jb20KSmVmZiBTdHVybQkJCQkJanN0dXJtQGdjYy5nbnUub3JnCktyZXN0ZW4gS3JhYiBUaG9ydXAJCQkJa3JhYkBnY2MuZ251Lm9yZwpDYXJvbGluZSBUaWNlCQkJCQljdGljZUBhcHBsZS5jb20KTWljaGFlbCBUaWVtYW5uCQkJCQl0aWVtYW5uQHJlZGhhdC5jb20KRGF2aWQgVW5nCQkJCQlkYXZpZHVAbWlwcy5jb20KSm9uYXRoYW4gV2FrZWx5CQkJCQlyZWRpQGdjYy5nbnUub3JnCktyaXN0ZXIgV2FsZnJpZHNzb24JCQkJY2F0b0BkZi5sdGguc2UKRmVuZyBXYW5nCQkJCQlmZW5nd2FuZ0BudWR0LmVkdS5jbgpKb2huIFdlaGxlCQkJCQlqb2huQGZlaXRoLmNvbQpGbG9yaWFuIFdlaW1lcgkJCQkJZndAZGVuZWIuZW55by5kZQpaYWNrIFdlaW5iZXJnCQkJCQl6YWNrd0BwYW5peC5jb20KTWFyayBXaWVsYWFyZAkJCQkJbWFya0BnY2MuZ251Lm9yZwpDYXJsbyBXb29kCQkJCQljYXJsb0BhbGlub2UuY29tCkNhbnF1biBZYW5nCQkJCQljYW5xdW5AbnVkdC5lZHUuY24KSmllIFpoYW5nCQkJCQlqaWUuemhhbmdAYW5hbG9nLmNvbQpKb24gWmllZ2xlcgkJCQkJam9uekBhcHBsZS5jb20KSm9zZWYgWmxvbWVrCQkJCQlqb3NlZi56bG9tZWtAZW1haWwuY3oKCkJ1ZyBkYXRhYmFzZSBvbmx5IGFjY291bnRzCgpKYW1lcyBEZW5uZXR0CQkJCQlqZGVubmV0dEBhY20ub3JnCkNocmlzdGlhbiBFaHJoYXJkdAkJCQllaHJoYXJkdEBtYXRoZW1hdGlrLnVuaS11bG0uZGUKRGFyYSBIYXplZ2hpCQkJCQlkaGF6ZWdoaUB5YWhvby5jb20K